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

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: cristy@eplrx7.es.duPont.com (John Cristy)
  4. Subject:  v34i054:  imagemagick - X11 image processing and display v2.2, Part26/26
  5. Message-ID: <1992Dec15.040009.23278@sparky.imd.sterling.com>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: 1b023be89139236e1f4c92935e0a9ee1
  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: Tue, 15 Dec 1992 04:00:09 GMT
  12. Approved: kent@sparky.imd.sterling.com
  13. Lines: 1098
  14.  
  15. Submitted-by: cristy@eplrx7.es.duPont.com (John Cristy)
  16. Posting-number: Volume 34, Issue 54
  17. Archive-name: imagemagick/part26
  18. Environment: UNIX, VMS, X11, SGI, DEC, Cray, Sun, Vax
  19.  
  20. #!/bin/sh
  21. # this is Part.26 (part 26 of a multipart archive)
  22. # do not concatenate these parts, unpack them in order with /bin/sh
  23. # file ImageMagick/utilities/convert.man 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" != 26; 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/utilities/convert.man'
  39. else
  40. echo 'x - continuing file ImageMagick/utilities/convert.man'
  41. sed 's/^X//' << 'SHAR_EOF' >> 'ImageMagick/utilities/convert.man' &&
  42. Copyright 1992 E. I. du Pont de Nemours & Company
  43. .PP
  44. Permission to use, copy, modify, distribute, and sell this software and
  45. its documentation for any purpose is hereby granted without fee,
  46. provided that the above copyright notice appear in all copies and that
  47. both that copyright notice and this permission notice appear in
  48. supporting documentation, and that the name of E. I. du Pont de Nemours
  49. & Company not be used in advertising or publicity pertaining to
  50. distribution of the software without specific, written prior
  51. permission.  E. I. du Pont de Nemours & Company makes no representations
  52. about the suitability of this software for any purpose.  It is provided
  53. "as is" without express or implied warranty.
  54. .PP
  55. E. I. du Pont de Nemours & Company disclaims all warranties with regard
  56. to this software, including all implied warranties of merchantability
  57. and fitness, in no event shall E. I. du Pont de Nemours & Company be
  58. liable for any special, indirect or consequential damages or any
  59. damages whatsoever resulting from loss of use, data or profits, whether
  60. in an action of contract, negligence or other tortious action, arising
  61. out of or in connection with the use or performance of this software.
  62. .SH AUTHORS
  63. John Cristy, E.I. du Pont De Nemours & Company Incorporated
  64. SHAR_EOF
  65. echo 'File ImageMagick/utilities/convert.man is complete' &&
  66. chmod 0644 ImageMagick/utilities/convert.man ||
  67. echo 'restore of ImageMagick/utilities/convert.man failed'
  68. Wc_c="`wc -c < 'ImageMagick/utilities/convert.man'`"
  69. test 7988 -eq "$Wc_c" ||
  70.     echo 'ImageMagick/utilities/convert.man: original size 7988, current size' "$Wc_c"
  71. rm -f _shar_wnt_.tmp
  72. fi
  73. # ============= ImageMagick/utilities/MIFFtoSTEREO.c ==============
  74. if test -f 'ImageMagick/utilities/MIFFtoSTEREO.c' -a X"$1" != X"-c"; then
  75.     echo 'x - skipping ImageMagick/utilities/MIFFtoSTEREO.c (File already exists)'
  76.     rm -f _shar_wnt_.tmp
  77. else
  78. > _shar_wnt_.tmp
  79. echo 'x - extracting ImageMagick/utilities/MIFFtoSTEREO.c (Text)'
  80. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/utilities/MIFFtoSTEREO.c' &&
  81. /*
  82. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  83. %                                                                             %
  84. %                                                                             %
  85. %                                                                             %
  86. %                 EEEEE  X   X  PPPP    OOO   RRRR    TTTTT                   %
  87. %                 E       X X   P   P  O   O  R   R     T                     %
  88. %                 EEE      X    PPPP   O   O  RRRR      T                     %
  89. %                 E       X X   P      O   O  R R       T                     %
  90. %                 EEEEE  X   X  P       OOO   R  R      T                     %
  91. %                                                                             %
  92. %                                                                             %
  93. %                 Export MIFF image to a stereo MIFF format.                  %
  94. %                                                                             %
  95. %                                                                             %
  96. %                                                                             %
  97. %                           Software Design                                   %
  98. %                             John Cristy                                     %
  99. %                              July 1992                                      %
  100. %                                                                             %
  101. %                                                                             %
  102. %  Copyright 1992 E. I. Dupont de Nemours & Company                           %
  103. %                                                                             %
  104. %  Permission to use, copy, modify, distribute, and sell this software and    %
  105. %  its documentation for any purpose is hereby granted without fee,           %
  106. %  provided that the above Copyright notice appear in all copies and that     %
  107. %  both that Copyright notice and this permission notice appear in            %
  108. %  supporting documentation, and that the name of E. I. Dupont de Nemours     %
  109. %  & Company not be used in advertising or publicity pertaining to            %
  110. %  distribution of the software without specific, written prior               %
  111. %  permission.  E. I. Dupont de Nemours & Company makes no representations    %
  112. %  about the suitability of this software for any purpose.  It is provided    %
  113. %  "as is" without express or implied warranty.                               %
  114. %                                                                             %
  115. %  E. I. Dupont de Nemours & Company disclaims all warranties with regard     %
  116. %  to this software, including all implied warranties of merchantability      %
  117. %  and fitness, in no event shall E. I. Dupont de Nemours & Company be        %
  118. %  liable for any special, indirect or consequential damages or any           %
  119. %  damages whatsoever resulting from loss of use, data or profits, whether    %
  120. %  in an action of contract, negligence or other tortious action, arising     %
  121. %  out of or in connection with the use or performance of this software.      %
  122. %                                                                             %
  123. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  124. %
  125. %  MIFFtoSTEREO combines two images and produces a single image that is the
  126. %  composite of a left and right image of a stereo pair.  The left image is
  127. %  converted to grayscale and written to the red channel of the stereo image.
  128. %  The right image is converted to grayscale and written to the blue channel
  129. %  of the stereo image.  View the composite image with red-blue glasses to
  130. %  create a stereo effect.
  131. %
  132. %  Command syntax:
  133. %
  134. %  export left_image.miff right_image.miff stereo_image.miff
  135. %
  136. %  Specify 'left_image.miff' or 'right_image.miff' as '-' for standard input.
  137. %  Specify 'stereo_image.miff' as '-' for standard output.
  138. %
  139. %
  140. */
  141. X
  142. #include "display.h"
  143. #include "image.h"
  144. #include "alien.h"
  145. #include "X.h"
  146. X
  147. /*
  148. X  Global declarations.
  149. */
  150. char
  151. X  *application_name;
  152. X
  153. /*
  154. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  155. %                                                                             %
  156. %                                                                             %
  157. %                                                                             %
  158. %   E r r o r                                                                 %
  159. %                                                                             %
  160. %                                                                             %
  161. %                                                                             %
  162. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  163. %
  164. %  Function Error displays an error message and then terminates the program.
  165. %
  166. %  The format of the Error routine is:
  167. %
  168. %      Error(message,qualifier)
  169. %
  170. %  A description of each parameter follows:
  171. %
  172. %    o message: Specifies the message to display before terminating the
  173. %      program.
  174. %
  175. %    o qualifier: Specifies any qualifier to the message.
  176. %
  177. %
  178. */
  179. void Error(message,qualifier)
  180. char
  181. X  *message,
  182. X  *qualifier;
  183. {
  184. X  (void) fprintf(stderr,"%s: %s",application_name,message);
  185. X  if (qualifier != (char *) NULL)
  186. X    (void) fprintf(stderr," (%s)",qualifier);
  187. X  (void) fprintf(stderr,".\n");
  188. X  exit(1);
  189. }
  190. X
  191. /*
  192. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  193. %                                                                             %
  194. %                                                                             %
  195. %                                                                             %
  196. %   U s a g e                                                                 %
  197. %                                                                             %
  198. %                                                                             %
  199. %                                                                             %
  200. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  201. %
  202. %  Procedure Usage displays the program usage;
  203. %
  204. %  The format of the Usage routine is:
  205. %
  206. %      Usage(message)
  207. %
  208. %  A description of each parameter follows:
  209. %
  210. %    message:  Specifies a specific message to display to the user.
  211. %
  212. */
  213. static void Usage(message)
  214. char
  215. X  *message;
  216. {
  217. X  if (message != (char *) NULL)
  218. X    (void) fprintf(stderr,"Can't continue, %s\n\n",message);
  219. X  (void) fprintf(stderr,
  220. X    "Usage: %s left_image.miff right_image.miff stereo_image.miff\n\n",
  221. X    application_name);
  222. X  (void) fprintf(stderr,"Specify 'left_image.miff' or 'right_image.miff' ");
  223. X  (void) fprintf(stderr,"as '-' for standard input.\n");
  224. X  (void) fprintf(stderr,
  225. X    "Specify 'stereo_image.miff' as '-' for standard output.\n");
  226. X  exit(1);
  227. }
  228. X
  229. /*
  230. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  231. %                                                                             %
  232. %                                                                             %
  233. %                                                                             %
  234. %    M a i n                                                                  %
  235. %                                                                             %
  236. %                                                                             %
  237. %                                                                             %
  238. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  239. %
  240. %
  241. */
  242. int main(argc,argv)
  243. int
  244. X  argc;
  245. X
  246. char
  247. X  *argv[];
  248. {
  249. X  Image
  250. X    *left_image,
  251. X    *right_image,
  252. X    *stereo_image;
  253. X
  254. X  int
  255. X    status;
  256. X
  257. X  time_t
  258. X    start_time;
  259. X
  260. X  application_name=argv[0];
  261. X  if (argc < 4)
  262. X    Usage((char *) NULL);
  263. X  start_time=time((time_t *) 0);
  264. X  left_image=ReadImage(argv[1]);
  265. X  if (left_image == (Image *) NULL)
  266. X    exit(1);
  267. X  right_image=ReadImage(argv[2]);
  268. X  if (right_image == (Image *) NULL)
  269. X    exit(1);
  270. X  stereo_image=StereoImage(left_image,right_image);
  271. X  (void) strcpy(stereo_image->filename,argv[3]);
  272. X  status=WriteAlienImage(stereo_image);
  273. X  /*
  274. X    Display detailed info about the image.
  275. X  */
  276. X  (void) fprintf(stderr,"[%d] %s %s=>%s %dx%d",stereo_image->scene,
  277. X    left_image->filename,right_image->filename,stereo_image->filename,
  278. X    stereo_image->columns,stereo_image->rows);
  279. X  if (stereo_image->class == DirectClass)
  280. X    (void) fprintf(stderr," DirectClass ");
  281. X  else
  282. X    (void) fprintf(stderr," PseudoClass ");
  283. X  (void) fprintf(stderr,"%dc %s %ds\n",stereo_image->colors,
  284. X    stereo_image->magick,time((time_t *) 0)-start_time+1);
  285. X  return(!status);
  286. }
  287. SHAR_EOF
  288. chmod 0644 ImageMagick/utilities/MIFFtoSTEREO.c ||
  289. echo 'restore of ImageMagick/utilities/MIFFtoSTEREO.c failed'
  290. Wc_c="`wc -c < 'ImageMagick/utilities/MIFFtoSTEREO.c'`"
  291. test 8742 -eq "$Wc_c" ||
  292.     echo 'ImageMagick/utilities/MIFFtoSTEREO.c: original size 8742, current size' "$Wc_c"
  293. rm -f _shar_wnt_.tmp
  294. fi
  295. # ============= ImageMagick/utilities/Make.com ==============
  296. if test -f 'ImageMagick/utilities/Make.com' -a X"$1" != X"-c"; then
  297.     echo 'x - skipping ImageMagick/utilities/Make.com (File already exists)'
  298.     rm -f _shar_wnt_.tmp
  299. else
  300. > _shar_wnt_.tmp
  301. echo 'x - extracting ImageMagick/utilities/Make.com (Text)'
  302. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/utilities/Make.com' &&
  303. $!
  304. $! Make ImageMagick X image utilities for VMS.
  305. $!
  306. $
  307. $define/nolog X11 decw$include:
  308. $define/nolog sys sys$library:
  309. $link_options="/nodebug/notraceback"
  310. $define/nolog lnk$library sys$library:vaxcrtl
  311. $
  312. $if ((p1.nes."").and.(p1.nes."mogrify")) then goto SkipMogrify
  313. $write sys$output "Making Mogrify..."
  314. $call Make mogrify
  315. $
  316. $link'link_options' mogrify,[-]X,[-]image,[-]rotate,[-]quantize,[-]colors, -
  317. X  [-]signature,[-]compress,[-]alien,[-]PreRvIcccm,sys$input:/opt
  318. sys$share:decw$xlibshr.exe/share
  319. $
  320. $mogrify:==$'f$environment("default")'mogrify
  321. $write sys$output "..symbol MOGRIFY defined."
  322. $
  323. $SkipMogrify:
  324. $if ((p1.nes."").and.(p1.nes."convert")) then goto SkipConvert
  325. $write sys$output "Making Convert..."
  326. $call Make convert
  327. $
  328. $link'link_options' convert,[-]X,[-]image,[-]rotate,[-]quantize,[-]colors, -
  329. X  [-]signature,[-]compress,[-]alien,[-]PreRvIcccm,sys$input:/opt
  330. sys$share:decw$xlibshr.exe/share
  331. $
  332. $convert:==$'f$environment("default")'convert
  333. $write sys$output "..symbol CONVERT defined."
  334. $SkipConvert:
  335. $
  336. $if ((p1.nes."").and.(p1.nes."MIFFtoSTEREO")) then goto SkipMIFFtoSTEREO
  337. $write sys$output "Making MIFFtoSTEREO..."
  338. $call Make MIFFtoSTEREO
  339. $
  340. $link'link_options' MIFFtoSTEREO,[-]X,[-]image,[-]rotate,[-]quantize, -
  341. X  [-]colors,[-]signature,[-]compress,[-]alien,[-]PreRvIcccm,sys$input:/opt
  342. sys$share:decw$xlibshr.exe/share
  343. $
  344. $MIFFtoSTEREO:== $'f$environment("default")'MIFFtoSTEREO
  345. $write sys$output "..symbol MIFFTOSTEREO defined."
  346. $
  347. $SkipMIFFtoSTEREO:
  348. $type sys$input
  349. X
  350. Use this command to specify which X server to contact:
  351. X
  352. X  $set display/create/node=node_name::
  353. X
  354. This can be done automatically from your LOGIN.COM with the following 
  355. command:
  356. X
  357. X  $if (f$trnlmn("sys$rem_node").nes."") then -
  358. X  $  set display/create/node='f$trnlmn("sys$rem_node")'
  359. $exit
  360. $
  361. $Make: subroutine
  362. $!
  363. $! A very primitive "make" (or MMS) hack for DCL.
  364. $!
  365. $if (p1.eqs."") then exit
  366. $source_file=f$search(f$parse(p1,".c"))
  367. $if (source_file.nes."")
  368. $  then
  369. $    object_file=f$parse(source_file,,,"name")+".obj"
  370. $    object_file=f$search( object_file )
  371. $    if (object_file.nes."") 
  372. $      then
  373. $        object_time=f$file_attribute(object_file,"cdt")
  374. $        source_time=f$file_attribute(source_file,"cdt")
  375. $        if (f$cvtime(object_time).lts.f$cvtime(source_time)) then -
  376. $          object_file=""
  377. $      endif
  378. $    if (object_file.eqs."") 
  379. $      then
  380. $        write sys$output "Compiling ",p1
  381. $        cc/nodebug/optimize/include_directory=[-] 'source_file'
  382. $      endif
  383. $  endif
  384. $exit
  385. $endsubroutine
  386. SHAR_EOF
  387. chmod 0644 ImageMagick/utilities/Make.com ||
  388. echo 'restore of ImageMagick/utilities/Make.com failed'
  389. Wc_c="`wc -c < 'ImageMagick/utilities/Make.com'`"
  390. test 2499 -eq "$Wc_c" ||
  391.     echo 'ImageMagick/utilities/Make.com: original size 2499, current size' "$Wc_c"
  392. rm -f _shar_wnt_.tmp
  393. fi
  394. # ============= ImageMagick/signature.c ==============
  395. if test -f 'ImageMagick/signature.c' -a X"$1" != X"-c"; then
  396.     echo 'x - skipping ImageMagick/signature.c (File already exists)'
  397.     rm -f _shar_wnt_.tmp
  398. else
  399. > _shar_wnt_.tmp
  400. echo 'x - extracting ImageMagick/signature.c (Text)'
  401. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/signature.c' &&
  402. /*
  403. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  404. %                                                                             %
  405. %                                                                             %
  406. %        SSSSS  IIIII   GGGG  N   N   AAA   TTTTT  U   U  RRRR   EEEEE        %
  407. %        SS       I    G      NN  N  A   A    T    U   U  R   R  E            %
  408. %         SSS     I    G  GG  N N N  AAAAA    T    U   U  RRRR   EEE          %
  409. %           SS    I    G   G  N  NN  A   A    T    U   U  R R    E            %
  410. %        SSSSS  IIIII   GGG   N   N  A   A    T     UUU   R  R   EEEEE        %
  411. %                                                                             %
  412. %                                                                             %
  413. %               Compute a Digital Signature for a Image Colormap              %
  414. %                                                                             %
  415. %                                                                             %
  416. %                                                                             %
  417. %                           Software Design                                   %
  418. %                             John Cristy                                     %
  419. %                            December 1992                                    %
  420. %                                                                             %
  421. %  Copyright 1992 E. I. du Pont de Nemours & Company                          %
  422. %                                                                             %
  423. %  Permission to use, copy, modify, distribute, and sell this software and    %
  424. %  its documentation for any purpose is hereby granted without fee,           %
  425. %  provided that the above Copyright notice appear in all copies and that     %
  426. %  both that Copyright notice and this permission notice appear in            %
  427. %  supporting documentation, and that the name of E. I. du Pont de Nemours    %
  428. %  & Company not be used in advertising or publicity pertaining to            %
  429. %  distribution of the software without specific, written prior               %
  430. %  permission.  E. I. du Pont de Nemours & Company makes no representations   %
  431. %  about the suitability of this software for any purpose.  It is provided    %
  432. %  "as is" without express or implied warranty.                               %
  433. %                                                                             %
  434. %  E. I. du Pont de Nemours & Company disclaims all warranties with regard    %
  435. %  to this software, including all implied warranties of merchantability      %
  436. %  and fitness, in no event shall E. I. du Pont de Nemours & Company be       %
  437. %  liable for any special, indirect or consequential damages or any           %
  438. %  damages whatsoever resulting from loss of use, data or profits, whether    %
  439. %  in an action of contract, negligence or other tortious action, arising     %
  440. %  out of or in connection with the use or performance of this software.      %
  441. %                                                                             %
  442. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  443. %
  444. %  Routine ColormapSignature computes a digital signature from the image
  445. %  colormap.  This signature uniquely identifies the colormap and is convenient
  446. %  for determining if the colormap of a sequence of images is identical when
  447. %  animating.  The digital signature is from RSA Data Security MD5 Digest
  448. %  Algorithm described in Internet draft [MD5], July 1992.
  449. %
  450. %
  451. */
  452. X
  453. /*
  454. X  Include declarations.
  455. */
  456. #include "display.h"
  457. #include "image.h"
  458. X
  459. /*
  460. X  Typedef declarations.
  461. */
  462. typedef struct _MessageDigest
  463. {
  464. X  unsigned long
  465. X    number_bits[2],
  466. X    accumulator[4];
  467. X
  468. X  unsigned char
  469. X    message[64],
  470. X    digest[16];
  471. } MessageDigest;
  472. X
  473. /*
  474. X  External declarations.
  475. */
  476. extern char
  477. X  *application_name;
  478. X
  479. /*
  480. X  Forward declarations.
  481. */
  482. static void
  483. X  TransformMessageDigest _Declare((MessageDigest *,unsigned long *)),
  484. X  UpdateMessageDigest _Declare((MessageDigest *,unsigned char *,unsigned long));
  485. X
  486. /*
  487. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  488. %                                                                             %
  489. %                                                                             %
  490. %                                                                             %
  491. %   C o m p u t e M e s s a g e D i g e s t                                   %
  492. %                                                                             %
  493. %                                                                             %
  494. %                                                                             %
  495. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  496. %
  497. %  Function ComputeMessageDigest computes the message digest.
  498. %
  499. %  The format of the ComputeMessageDigest routine is:
  500. %
  501. %      ComputeMessageDigest(message_digest,input_message,message_length)
  502. %
  503. %  A description of each parameter follows:
  504. %
  505. %    o message_digest: The address of a structure of type MessageDigest.
  506. %
  507. %
  508. */
  509. static void ComputeMessageDigest(message_digest)
  510. MessageDigest
  511. X  *message_digest;
  512. {
  513. X  int
  514. X    number_bytes;
  515. X
  516. X  register unsigned char
  517. X    *p;
  518. X
  519. X  register unsigned int
  520. X    i;
  521. X
  522. X  unsigned char
  523. X    padding[64];
  524. X
  525. X  unsigned long
  526. X    message[16],
  527. X    padding_length;
  528. X
  529. X  /*
  530. X    Save number of bits.
  531. X  */
  532. X  message[14]=message_digest->number_bits[0];
  533. X  message[15]=message_digest->number_bits[1];
  534. X  /*
  535. X    Compute number of bytes mod 64.
  536. X  */
  537. X  number_bytes=(int) ((message_digest->number_bits[0] >> 3) & 0x3F);
  538. X  /*
  539. X    Pad message to 56 mod 64.
  540. X  */
  541. X  padding_length=(number_bytes < 56) ? (56-number_bytes) : (120-number_bytes);
  542. X  padding[0]=0x80;
  543. X  for (i=1; i < padding_length; i++)
  544. X    padding[i]=(char) 0;
  545. X  UpdateMessageDigest(message_digest,padding,padding_length);
  546. X  /*
  547. X    Append length in bits and transform.
  548. X  */
  549. X  p=message_digest->message;
  550. X  for (i=0; i < 14; i++)
  551. X  {
  552. X    message[i]=(unsigned long) (*p++);
  553. X    message[i]|=((unsigned long) (*p++)) << 8;
  554. X    message[i]|=((unsigned long) (*p++)) << 16;
  555. X    message[i]|=((unsigned long) (*p++)) << 24;
  556. X  }
  557. X  TransformMessageDigest(message_digest,message);
  558. X  /*
  559. X    Store message in digest.
  560. X  */
  561. X  p=message_digest->digest;
  562. X  for (i=0; i < 4; i++)
  563. X  {
  564. X    *p++=(unsigned char) (message_digest->accumulator[i] & 0xff);
  565. X    *p++=(unsigned char) ((message_digest->accumulator[i] >> 8) & 0xff);
  566. X    *p++=(unsigned char) ((message_digest->accumulator[i] >> 16) & 0xff);
  567. X    *p++=(unsigned char) ((message_digest->accumulator[i] >> 24) & 0xff);
  568. X  }
  569. }
  570. X
  571. /*
  572. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  573. %                                                                             %
  574. %                                                                             %
  575. %                                                                             %
  576. %   I n i t i a l i z e M e s s a g e D i g e s t                             %
  577. %                                                                             %
  578. %                                                                             %
  579. %                                                                             %
  580. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  581. %
  582. %  Function InitializeMessageDigest initializes the message digest structure.
  583. %
  584. %  The format of the InitializeMessageDigest routine is:
  585. %
  586. %      InitializeMessageDigest(message_digest)
  587. %
  588. %  A description of each parameter follows:
  589. %
  590. %    o message_digest: The address of a structure of type MessageDigest.
  591. %
  592. %
  593. */
  594. static void InitializeMessageDigest(message_digest)
  595. MessageDigest
  596. X  *message_digest;
  597. {
  598. X  message_digest->number_bits[0]=(unsigned long) 0;
  599. X  message_digest->number_bits[1]=(unsigned long) 0;
  600. X  /*
  601. X    Load magic initialization constants.
  602. X  */
  603. X  message_digest->accumulator[0]=(unsigned long) 0x67452301;
  604. X  message_digest->accumulator[1]=(unsigned long) 0xefcdab89;
  605. X  message_digest->accumulator[2]=(unsigned long) 0x98badcfe;
  606. X  message_digest->accumulator[3]=(unsigned long) 0x10325476;
  607. }
  608. X
  609. /*
  610. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  611. %                                                                             %
  612. %                                                                             %
  613. %                                                                             %
  614. %   T r a n s f o r m M e s s a g e D i g e s t                               %
  615. %                                                                             %
  616. %                                                                             %
  617. %                                                                             %
  618. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  619. %
  620. %  Function TransformMessageDigest updates the message digest.
  621. %
  622. %  The format of the TransformMessageDigest routine is:
  623. %
  624. %      TransformMessageDigest(message_digest,message)
  625. %
  626. %  A description of each parameter follows:
  627. %
  628. %    o message_digest: The address of a structure of type MessageDigest.
  629. %
  630. %
  631. */
  632. static void TransformMessageDigest(message_digest,message)
  633. MessageDigest
  634. X  *message_digest;
  635. X
  636. unsigned long
  637. X  *message;
  638. {
  639. #define F(x,y,z)  (((x) & (y)) | ((~x) & (z)))
  640. #define G(x,y,z)  (((x) & (z)) | ((y) & (~z)))
  641. #define H(x,y,z)  ((x) ^ (y) ^ (z))
  642. #define I(x,y,z)  ((y) ^ ((x) | (~z)))
  643. #define RotateLeft(x,n)  (((x) << (n)) | (((x) & 0xffffffff) >> (32-(n))))
  644. X
  645. X  static unsigned long int
  646. X    additive_constant[64]=  /* 4294967296*abs(sin(i)), i in radians */
  647. X    {
  648. X      3614090360L, 3905402710L,  606105819L, 3250441966L,
  649. X      4118548399L, 1200080426L, 2821735955L, 4249261313L,
  650. X      1770035416L, 2336552879L, 4294925233L, 2304563134L,
  651. X      1804603682L, 4254626195L, 2792965006L, 1236535329L,
  652. X      4129170786L, 3225465664L,  643717713L, 3921069994L,
  653. X      3593408605L,   38016083L, 3634488961L, 3889429448L,
  654. X       568446438L, 3275163606L, 4107603335L, 1163531501L,
  655. X      2850285829L, 4243563512L, 1735328473L, 2368359562L,
  656. X      4294588738L, 2272392833L, 1839030562L, 4259657740L,
  657. X      2763975236L, 1272893353L, 4139469664L, 3200236656L,
  658. X       681279174L, 3936430074L, 3572445317L,   76029189L,
  659. X      3654602809L, 3873151461L,  530742520L, 3299628645L,
  660. X      4096336452L, 1126891415L, 2878612391L, 4237533241L,
  661. X      1700485571L, 2399980690L, 4293915773L, 2240044497L,
  662. X      1873313359L, 4264355552L, 2734768916L, 1309151649L,
  663. X      4149444226L, 3173756917L,  718787259L, 3951481745L
  664. X    };
  665. X
  666. X  register int
  667. X    i;
  668. X
  669. X  register unsigned int
  670. X    j;
  671. X
  672. X  register unsigned long int
  673. X    a,
  674. X    b,
  675. X    c,
  676. X    d,
  677. X    *p;
  678. X
  679. X  /*
  680. X    Save accumulator.
  681. X  */
  682. X  a=message_digest->accumulator[0];
  683. X  b=message_digest->accumulator[1];
  684. X  c=message_digest->accumulator[2];
  685. X  d=message_digest->accumulator[3];
  686. X  /*
  687. X    a=b+((a+F(b,c,d)+X[k]+t) <<< s).
  688. X  */
  689. X  p=additive_constant;
  690. X  j=0;
  691. X  for (i=0; i < 4; i++)
  692. X  {
  693. X    a+=F(b,c,d)+message[j & 0x0f]+(*p++);
  694. X    a=RotateLeft(a,7)+b;
  695. X    j++;
  696. X    d+=F(a,b,c)+message[j & 0x0f]+(*p++);
  697. X    d=RotateLeft(d,12)+a;
  698. X    j++;
  699. X    c+=F(d,a,b)+message[j & 0x0f]+(*p++);
  700. X    c=RotateLeft(c,17)+d;
  701. X    j++;
  702. X    b+=F(c,d,a)+message[j & 0x0f]+(*p++);
  703. X    b=RotateLeft(b,22)+c;
  704. X    j++;
  705. X  }
  706. X  /*
  707. X    a=b+((a+G(b,c,d)+X[k]+t) <<< s).
  708. X  */
  709. X  j=1;
  710. X  for (i=0; i < 4; i++)
  711. X  {
  712. X    a+=G(b,c,d)+message[j & 0x0f]+(*p++);
  713. X    a=RotateLeft(a,5)+b;
  714. X    j+=5;
  715. X    d+=G(a,b,c)+message[j & 0x0f]+(*p++);
  716. X    d=RotateLeft(d,9)+a;
  717. X    j+=5;
  718. X    c+=G(d,a,b)+message[j & 0x0f]+(*p++);
  719. X    c=RotateLeft(c,14)+d;
  720. X    j+=5;
  721. X    b+=G(c,d,a)+message[j & 0x0f]+(*p++);
  722. X    b=RotateLeft(b,20)+c;
  723. X    j+=5;
  724. X  }
  725. X  /*
  726. X    a=b+((a+H(b,c,d)+X[k]+t) <<< s).
  727. X  */
  728. X  j=5;
  729. X  for (i=0; i < 4; i++)
  730. X  {
  731. X    a+=H(b,c,d)+message[j & 0x0f]+(*p++);
  732. X    a=RotateLeft(a,4)+b;
  733. X    j+=3;
  734. X    d+=H(a,b,c)+message[j & 0x0f]+(*p++);
  735. X    d=RotateLeft(d,11)+a;
  736. X    j+=3;
  737. X    c+=H(d,a,b)+message[j & 0x0f]+(*p++);
  738. X    c=RotateLeft(c,16)+d;
  739. X    j+=3;
  740. X    b+=H(c,d,a)+message[j & 0x0f]+(*p++);
  741. X    b=RotateLeft(b,23)+c;
  742. X    j+=3;
  743. X  }
  744. X  /*
  745. X    a=b+((a+I(b,c,d)+X[k]+t) <<< s).
  746. X  */
  747. X  j=0;
  748. X  for (i=0; i < 4; i++)
  749. X  {
  750. X    a+=I(b,c,d)+message[j & 0x0f]+(*p++);
  751. X    a=RotateLeft(a,6)+b;
  752. X    j+=7;
  753. X    d+=I(a,b,c)+message[j & 0x0f]+(*p++);
  754. X    d=RotateLeft(d,10)+a;
  755. X    j+=7;
  756. X    c+=I(d,a,b)+message[j & 0x0f]+(*p++);
  757. X    c=RotateLeft(c,15)+d;
  758. X    j+=7;
  759. X    b+=I(c,d,a)+message[j & 0x0f]+(*p++);
  760. X    b=RotateLeft(b,21)+c;
  761. X    j+=7;
  762. X  }
  763. X  /*
  764. X    Increment accumulator.
  765. X  */
  766. X  message_digest->accumulator[0]+=a;
  767. X  message_digest->accumulator[1]+=b;
  768. X  message_digest->accumulator[2]+=c;
  769. X  message_digest->accumulator[3]+=d;
  770. }
  771. X
  772. /*
  773. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  774. %                                                                             %
  775. %                                                                             %
  776. %                                                                             %
  777. %   U p d a t e M e s s a g e D i g e s t                                     %
  778. %                                                                             %
  779. %                                                                             %
  780. %                                                                             %
  781. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  782. %
  783. %  Function UpdateMessageDigest updates the message digest.
  784. %
  785. %  The format of the UpdateMessageDigest routine is:
  786. %
  787. %      UpdateMessageDigest(message_digest,input_message,message_length)
  788. %
  789. %  A description of each parameter follows:
  790. %
  791. %    o message_digest: The address of a structure of type MessageDigest.
  792. %
  793. %
  794. */
  795. static void UpdateMessageDigest(message_digest,input_message,message_length)
  796. MessageDigest
  797. X  *message_digest;
  798. X
  799. unsigned char
  800. X  *input_message;
  801. X
  802. unsigned long
  803. X  message_length;
  804. {
  805. X  int
  806. X    number_bytes;
  807. X
  808. X  register unsigned char
  809. X    *p;
  810. X
  811. X  register unsigned int
  812. X    i;
  813. X
  814. X  unsigned long
  815. X    message[16];
  816. X
  817. X  /*
  818. X    Compute number of bytes mod 64.
  819. X  */
  820. X  number_bytes=(int) ((message_digest->number_bits[0] >> 3) & 0x3F);
  821. X  /*
  822. X    Update number of bits.
  823. X  */
  824. X  if (((message_digest->number_bits[0]+(message_length << 3)) & 0xffffffff) <
  825. X      message_digest->number_bits[0])
  826. X    message_digest->number_bits[1]++;
  827. X  message_digest->number_bits[0]+=message_length << 3;
  828. X  message_digest->number_bits[1]+=message_length >> 29;
  829. X  while (message_length--)
  830. X  {
  831. X    /*
  832. X      Add new character to message.
  833. X    */
  834. X    message_digest->message[number_bytes++]=(*input_message++);
  835. X    if (number_bytes == 0x40)
  836. X      {
  837. X        /*
  838. X          Transform message digest 64 bytes at a time.
  839. X        */
  840. X        p=message_digest->message;
  841. X        for (i=0; i < 16; i++)
  842. X        {
  843. X          message[i]=(unsigned long) (*p++);
  844. X          message[i]|=((unsigned long) (*p++)) << 8;
  845. X          message[i]|=((unsigned long) (*p++)) << 16;
  846. X          message[i]|=((unsigned long) (*p++)) << 24;
  847. X        }
  848. X        TransformMessageDigest(message_digest,message);
  849. X        number_bytes=0;
  850. X      }
  851. X  }
  852. }
  853. X
  854. /*
  855. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  856. %                                                                             %
  857. %                                                                             %
  858. %                                                                             %
  859. %   C o l o r m a p S i g n a t u r e                                         %
  860. %                                                                             %
  861. %                                                                             %
  862. %                                                                             %
  863. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  864. %
  865. %  Fucntion ColormapSignature computes a digital signature from the image
  866. %  colormap.  This signature uniquely identifies the colormap and is convenient
  867. %  for determining if the colormap of a sequence of images is identical when
  868. %  animating.  The digital signature is from RSA Data Security MD5 Digest
  869. %  Algorithm described in Internet draft [MD5], July 1992.
  870. %
  871. %  The format of the ColormapSignature routine is:
  872. %
  873. %      ColormapSignature(image)
  874. %
  875. %  A description of each parameter follows:
  876. %
  877. %    o image: The address of a structure of type Image.
  878. %
  879. %
  880. %
  881. */
  882. void ColormapSignature(image)
  883. Image
  884. X  *image;
  885. {
  886. X  char
  887. X    *hex;
  888. X
  889. X  MessageDigest
  890. X    message_digest;
  891. X
  892. X  register int
  893. X    i;
  894. X
  895. X  register unsigned char
  896. X    *p;
  897. X
  898. X  unsigned char
  899. X    *colormap;
  900. X
  901. X  if (image->class != PseudoClass)
  902. X    return;
  903. X  /*
  904. X    Allocate colormap.
  905. X  */
  906. X  colormap=(unsigned char *) malloc(3*image->colors*sizeof(unsigned char));
  907. X  if (colormap == (unsigned char *) NULL)
  908. X    {
  909. X      Warning("unable to compute colormap signature",
  910. X        "memory allocation failed");
  911. X      return;
  912. X    }
  913. X  p=colormap;
  914. X  for (i=0; i < image->colors; i++)
  915. X  {
  916. X    *p++=image->colormap[i].red;
  917. X    *p++=image->colormap[i].green;
  918. X    *p++=image->colormap[i].blue;
  919. X  }
  920. X  /*
  921. X    Compute program colormap signature.
  922. X  */
  923. X  InitializeMessageDigest(&message_digest);
  924. X  UpdateMessageDigest(&message_digest,colormap,
  925. X    (unsigned long) (image->colors*3));
  926. X  ComputeMessageDigest(&message_digest);
  927. X  (void) free((char *) colormap);
  928. X  /*
  929. X    Allocate memory for signature.
  930. X  */
  931. X  if (image->signature != (char *) NULL)
  932. X    (void) free((char *) image->signature);
  933. X  image->signature=(char *) malloc(33*sizeof(char));
  934. X  if (image->signature == (char *) NULL)
  935. X    {
  936. X      Warning("unable to compute colormap signature",
  937. X        "memory allocation failed");
  938. X      return;
  939. X    }
  940. X  /*
  941. X    Convert digital signature to a 32 character hex string.
  942. X  */
  943. X  p=(unsigned char *) image->signature;
  944. X  hex="0123456789abcdef";
  945. X  for (i=0; i < 16; i++)
  946. X  {
  947. X    *p++=hex[(message_digest.digest[i] >> 4) & 0xf];
  948. X    *p++=hex[message_digest.digest[i] & 0xf];
  949. X  }
  950. X  *p='\0';
  951. }
  952. SHAR_EOF
  953. chmod 0644 ImageMagick/signature.c ||
  954. echo 'restore of ImageMagick/signature.c failed'
  955. Wc_c="`wc -c < 'ImageMagick/signature.c'`"
  956. test 17946 -eq "$Wc_c" ||
  957.     echo 'ImageMagick/signature.c: original size 17946, current size' "$Wc_c"
  958. rm -f _shar_wnt_.tmp
  959. fi
  960. # ============= ImageMagick/ChangeLog ==============
  961. if test -f 'ImageMagick/ChangeLog' -a X"$1" != X"-c"; then
  962.     echo 'x - skipping ImageMagick/ChangeLog (File already exists)'
  963.     rm -f _shar_wnt_.tmp
  964. else
  965. > _shar_wnt_.tmp
  966. echo 'x - extracting ImageMagick/ChangeLog (Text)'
  967. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/ChangeLog' &&
  968. ImageMagick 2.2
  969. X
  970. X  o When displaying a composite MIFF image created with `montage',
  971. X    button 3 no longer displays a magnify window.  Instead the
  972. X    tile at the mouse location is displayed.  When the tile image is
  973. X    exited, the composite image reappears.  This is effectively a
  974. X    visual image directory.
  975. X
  976. X  o `montage' has a new gravity option for placing an image within
  977. X    a tile of the composite, i.e. CenterGravity.
  978. X
  979. X  o `montage' has a new compose option for specifying which composite
  980. X     operation to use.
  981. X
  982. X  o `montage' creates composite images with the `montage' keyword.
  983. X
  984. X  o Updated MIFF manual page to reflect 'montage' image header
  985. X    keyword.
  986. X
  987. X  o Some compilers have read-only strings.   ImageMagick no longer
  988. X    writes on read-only strings.
  989. X
  990. X  o For colormapped X servers, the color reduction has been sped up by
  991. X    trading image quality for processing time.  See the README for
  992. X    details.
  993. X
  994. X  o Latin1Upper was declared wrong in X.h.
  995. X
  996. X  o Added unistd.h to display.h for strict ANSI compilers.
  997. X
  998. X  o Changed long to time_t for calls to C time routine.
  999. X
  1000. X  o Multi-part GIF's can now be displayed or animated.
  1001. X
  1002. X  o Fixed segmentation fault when reading multi-part images with
  1003. X    animate, montage, or mogrify.
  1004. X
  1005. X  o Multi-part MIFF images have the correct file name now.
  1006. X
  1007. X  o An expose event for the Magnify window may occur before it is
  1008. X    mapped.  This caused display to fail on Solburne and HP's.
  1009. X
  1010. X  o Using `-colorspace gray' with 'convert' correctly produces
  1011. X    grayscale images.
  1012. X
  1013. X  o Images are sorted by intensity for shared colormapped visuals.
  1014. X    Some intensity intervals are made "more popular".  This gives better
  1015. X    image results when sharing colors with other applications.
  1016. X
  1017. X  o All utilities correctly read multi-part TIFF images.
  1018. X
  1019. X  o Image pixmap was not being updated correctly when pan icon appears
  1020. X    (thanks to dws@ssec.wisc.edu).
  1021. X
  1022. X  o Fixed ANSI warning on image composite code.
  1023. X
  1024. X  o Panning uses a pixmap for faster panning speed.
  1025. X
  1026. X  o Rotate.c now uses a table to force range limits.
  1027. X
  1028. X  o Fixed strcasecmp to work under VMS.
  1029. X
  1030. X  o range table in quantize.c is allocated from the heap instead of
  1031. X    the stack.
  1032. X
  1033. X  o adjusted the sensitivity for automatic dithering.  Some JPEG images
  1034. X    were not being dithered.
  1035. SHAR_EOF
  1036. chmod 0644 ImageMagick/ChangeLog ||
  1037. echo 'restore of ImageMagick/ChangeLog failed'
  1038. Wc_c="`wc -c < 'ImageMagick/ChangeLog'`"
  1039. test 2264 -eq "$Wc_c" ||
  1040.     echo 'ImageMagick/ChangeLog: original size 2264, current size' "$Wc_c"
  1041. rm -f _shar_wnt_.tmp
  1042. fi
  1043. # ============= ImageMagick/Magick.tmpl ==============
  1044. if test -f 'ImageMagick/Magick.tmpl' -a X"$1" != X"-c"; then
  1045.     echo 'x - skipping ImageMagick/Magick.tmpl (File already exists)'
  1046.     rm -f _shar_wnt_.tmp
  1047. else
  1048. > _shar_wnt_.tmp
  1049. echo 'x - extracting ImageMagick/Magick.tmpl (Text)'
  1050. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/Magick.tmpl' &&
  1051. /*
  1052. X  ImageMagick Imakefile info.  This contains any special redefinitions.
  1053. X
  1054. X  Copyright 1992 E. I. du Pont de Nemours & Company
  1055. X
  1056. X  Permission to use, copy, modify, distribute, and sell this software and
  1057. X  its documentation for any purpose is hereby granted without fee,
  1058. X  provided that the above Copyright notice appear in all copies and that
  1059. X  both that Copyright notice and this permission notice appear in
  1060. X  supporting documentation, and that the name of E. I. du Pont de Nemours
  1061. X  & Company not be used in advertising or publicity pertaining to
  1062. X  distribution of the software without specific, written prior
  1063. X  permission.  E. I. du Pont de Nemours & Company makes no representations
  1064. X  about the suitability of this software for any purpose.  It is provided
  1065. X  "as is" without express or implied warranty.
  1066. X
  1067. X  E. I. du Pont de Nemours & Company disclaims all warranties with regard
  1068. X  to this software, including all implied warranties of merchantability
  1069. X  and fitness, in no event shall E. I. du Pont de Nemours & Company be
  1070. X  liable for any special, indirect or consequential damages or any
  1071. X  damages whatsoever resulting from loss of use, data or profits, whether
  1072. X  in an action of contract, negligence or other tortious action, arising
  1073. X  out of or in connection with the use or performance of this software.
  1074. */
  1075. X
  1076. /*
  1077. X  Uncomment the following lines if you have the JPEG or TIFF libraries.
  1078. X  See README for more details.
  1079. X
  1080. JPEG= -DAlienJPEG
  1081. JPEG_INCLUDES= -Ijpeg -I../jpeg
  1082. JPEG_LIBRARIES= -Ljpeg -L../jpeg -ljpeg
  1083. TIFF= -DAlienTIFF
  1084. TIFF_INCLUDES= -Itiff/libtiff -I../tiff/libtiff
  1085. TIFF_LIBRARIES= -Ltiff/libtiff -L../tiff/libtiff -ltiff
  1086. */
  1087. X
  1088. /*
  1089. X  Might need one of these for xtp to link correctly.
  1090. X
  1091. EXTRA_LOAD_FLAGS= -lnsl
  1092. EXTRA_LOAD_FLAGS= -linet -lnsl_s -lrpc -lcposix
  1093. */
  1094. X
  1095. DEFINES= $(JPEG) $(JPEG_INCLUDES) $(TIFF) $(TIFF_INCLUDES)
  1096. LOCALDIR=/usr/local/bin
  1097. SYS_LIBRARIES= $(XLIB) $(JPEG_LIBRARIES) $(TIFF_LIBRARIES) -lm
  1098. X
  1099. #define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)' 'CC=$(CC)' \
  1100. X  'CCOPTIONS=$(CCOPTIONS)'
  1101. SHAR_EOF
  1102. chmod 0644 ImageMagick/Magick.tmpl ||
  1103. echo 'restore of ImageMagick/Magick.tmpl failed'
  1104. Wc_c="`wc -c < 'ImageMagick/Magick.tmpl'`"
  1105. test 2012 -eq "$Wc_c" ||
  1106.     echo 'ImageMagick/Magick.tmpl: original size 2012, current size' "$Wc_c"
  1107. rm -f _shar_wnt_.tmp
  1108. fi
  1109. rm -f _shar_seq_.tmp
  1110. echo You have unpacked the last part
  1111. exit 0
  1112. exit 0 # Just in case...
  1113.