home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume34 / imagemagick / patch05 < prev    next >
Text File  |  1993-01-18  |  25KB  |  750 lines

  1. Newsgroups: comp.sources.misc
  2. From: cristy@eplrx7.es.duPont.com (John Cristy)
  3. Subject: v34i118:  imagemagick - X11 image processing and display v2.2, Patch05
  4. Message-ID: <1993Jan18.181705.26370@sparky.imd.sterling.com>
  5. X-Md4-Signature: bd0f74bf8bcdca4984cbbdaefd434be6
  6. Date: Mon, 18 Jan 1993 18:17:05 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: cristy@eplrx7.es.duPont.com (John Cristy)
  10. Posting-number: Volume 34, Issue 118
  11. Archive-name: imagemagick/patch05
  12. Environment: UNIX, VMS, X11, SGI, DEC, Cray, Sun, Vax
  13. Patch-To: imagemagick: Volume 34, Issue 28-54
  14.  
  15.                     ImageMagick 2.2 Patch #5
  16.  
  17. To apply this patch:
  18.  
  19. cd to the top of the source tree (to the directory containing the
  20. "ImageMagick" subdirectories) and do:
  21.  
  22.   patch -p < ThisFile
  23.  
  24. Prereq - ImageMagick 2.2.2 (posted from comp.sources.misc, Volume 34,
  25. Issue 28 + Patch 1-4).
  26.  
  27. Alternatively get the entire distribution as contrib/ImageMagick.tar.Z
  28. on export.lcs.mit.edu.
  29.  
  30. diff -r -c ImageMagick/ChangeLog ImageMagick2.2.5/ChangeLog
  31. *** ImageMagick/ChangeLog    Wed Jan  6 17:57:53 1993
  32. --- ImageMagick2.2.5/ChangeLog    Wed Jan 13 16:59:28 1993
  33. ***************
  34. *** 1,3 ****
  35. --- 1,15 ----
  36. + ImageMagick 2.2.5
  37. +   
  38. +   o Keyboard accelerators did not work with -backdrop option.
  39. +   o xtp failed under Solaris 2.1.
  40. +   o I486 compiler complained about includes within a function body of
  41. +     xtp/network.c (thanks to glenn@physics.su.OZ.AU).
  42. +   o I486 compiler complained about XWDfile.h be included twice (ReadXWD &
  43. +     WriteXWD) (thanks to glenn@physics.su.OZ.AU)
  44.   ImageMagick 2.2.4
  45.   
  46.     o time between images did not always match the value specified on
  47. ***************
  48. *** 5,12 ****
  49.   
  50.     o Sped up and reduced memory requirement of dithering.
  51.   
  52. !   o GIF files were corrupted on SVR4.
  53.   
  54.   ImageMagick 2.2.3
  55.   
  56. --- 17,23 ----
  57.   
  58.     o Sped up and reduced memory requirement of dithering.
  59.   
  60. !   o GIF images were corrupted on SVR4 (thanks to glenn@physics.su.OZ.AU).
  61.   
  62.   ImageMagick 2.2.3
  63.   
  64. diff -r -c ImageMagick/alien.c ImageMagick2.2.5/alien.c
  65. *** ImageMagick/alien.c    Wed Jan  6 17:56:07 1993
  66. --- ImageMagick2.2.5/alien.c    Wed Jan 13 16:58:10 1993
  67. ***************
  68. *** 56,61 ****
  69. --- 56,62 ----
  70.   #include "alien.h"
  71.   #include "compress.h"
  72.   #include "X.h"
  73. + #include "XWDFile.h"
  74.   
  75.   /*
  76.     Global declarations.
  77. ***************
  78. *** 3969,3976 ****
  79.   AlienInfo
  80.     *alien_info;
  81.   {
  82. - #include "XWDFile.h"
  83.     char
  84.       *window_name;
  85.   
  86. --- 3970,3975 ----
  87. ***************
  88. *** 6193,6200 ****
  89.   Image
  90.     *image;
  91.   {
  92. - #include "XWDFile.h"
  93.     int
  94.       x;
  95.   
  96. --- 6192,6197 ----
  97. diff -r -c ImageMagick/compress.c ImageMagick2.2.5/compress.c
  98. *** ImageMagick/compress.c    Wed Jan  6 17:56:07 1993
  99. --- ImageMagick2.2.5/compress.c    Wed Jan 13 16:58:10 1993
  100. ***************
  101. *** 48,63 ****
  102.   %  Functions LZWEncodeImage and LZWDecodeImage is based on the GIF image
  103.   %  format specifications.
  104.   %
  105. ! %  Functions QEncodeImage and QDecodeImage is based on the document
  106. ! %  "JPEG-9-R6 Working Draft for Development of JPEG CD", January 1992.
  107. ! %  These routines only implement the lossless JPEG compression algorithm in
  108. ! %  a non-standard fashion.  They can only be used to code and decode MIFF
  109. ! %  images.
  110.   %
  111. - %  Images are compressed using a simple predictive method.  The predictor
  112. - %  combines three neighboring samples (A, B, and C) to form a prediction
  113. - %  of the sample X:
  114. - %
  115.   %    C B
  116.   %    A X
  117.   %
  118. --- 48,57 ----
  119.   %  Functions LZWEncodeImage and LZWDecodeImage is based on the GIF image
  120.   %  format specifications.
  121.   %
  122. ! %  Functions QEncodeImage and QDecodeImage use a simple predictive method.
  123. ! %  The predictor combines three neighboring samples (A, B, and C) to form a
  124. ! %  prediction of the sample X:
  125.   %
  126.   %    C B
  127.   %    A X
  128.   %
  129. ***************
  130. *** 1393,1400 ****
  131.   %
  132.   %  The format of the QEncodeImage routine is:
  133.   %
  134. ! %      count=QEncodeImage(pixels,compressed_pixels,number_columns,
  135. ! %        number_rows)
  136.   %
  137.   %  A description of each parameter follows:
  138.   %
  139. --- 1387,1393 ----
  140.   %
  141.   %  The format of the QEncodeImage routine is:
  142.   %
  143. ! %      count=QEncodeImage(pixels,compressed_pixels,number_columns,number_rows)
  144.   %
  145.   %  A description of each parameter follows:
  146.   %
  147. diff -r -c ImageMagick/display.c ImageMagick2.2.5/display.c
  148. *** ImageMagick/display.c    Wed Jan  6 17:56:08 1993
  149. --- ImageMagick2.2.5/display.c    Wed Jan 13 16:58:11 1993
  150. ***************
  151. *** 2777,2784 ****
  152.           (void) fprintf(stderr,"Window id: 0x%lx (backdrop)\n",
  153.             window->backdrop.id);
  154.         XMapWindow(display,window->backdrop.id);
  155. -       XInstallColormap(display,map_info->colormap);
  156. -       XSetInputFocus(display,window->backdrop.id,RevertToNone,CurrentTime);
  157.         XClearWindow(display,window->backdrop.id);
  158.         /*
  159.           Position image in the center the backdrop.
  160. --- 2777,2782 ----
  161. ***************
  162. *** 2786,2798 ****
  163.         window->image.flags|=USPosition;
  164.         window->image.x=0;
  165.         width=displayed_image->columns+window->image.border_width;
  166. !       if (width < XDisplayWidth(display,visual_info->screen))
  167. !         window->image.x=XDisplayWidth(display,visual_info->screen)/2-width/2;
  168.         window->image.y=0;
  169.         height=displayed_image->rows+window->image.border_width;
  170. !       if (height < XDisplayHeight(display,visual_info->screen))
  171. !         window->image.y=XDisplayHeight(display,visual_info->screen)/2-height/2;
  172. !       if (window->backdrop.id != (Window) NULL)
  173.           {
  174.             XDestroyWindow(display,window->image.id);
  175.             window->image.id=(Window) NULL;
  176. --- 2784,2798 ----
  177.         window->image.flags|=USPosition;
  178.         window->image.x=0;
  179.         width=displayed_image->columns+window->image.border_width;
  180. !       if (width > XDisplayWidth(display,window->image.screen))
  181. !         width=(XDisplayWidth(display,window->image.screen)*7) >> 3;
  182. !       window->image.x=XDisplayWidth(display,visual_info->screen)/2-width/2;
  183.         window->image.y=0;
  184.         height=displayed_image->rows+window->image.border_width;
  185. !       if (height > XDisplayHeight(display,window->image.screen))
  186. !         height=(XDisplayHeight(display,window->image.screen)*7) >> 3;
  187. !       window->image.y=XDisplayHeight(display,visual_info->screen)/2-height/2;
  188. !       if (window->image.id != (Window) NULL)
  189.           {
  190.             XDestroyWindow(display,window->image.id);
  191.             window->image.id=(Window) NULL;
  192. ***************
  193. *** 2813,2819 ****
  194.       class_hint,manager_hints,delete_property,&window->image);
  195.     if (resource_info->debug)
  196.       (void) fprintf(stderr,"Window id: 0x%lx (image)\n",window->image.id);
  197. !   *state|=ReconfigureImageState;
  198.     window->image.x=0;
  199.     window->image.y=0;
  200.     /*
  201. --- 2813,2820 ----
  202.       class_hint,manager_hints,delete_property,&window->image);
  203.     if (resource_info->debug)
  204.       (void) fprintf(stderr,"Window id: 0x%lx (image)\n",window->image.id);
  205. !   if (window->backdrop.id == (Window) NULL)
  206. !     *state|=ReconfigureImageState;
  207.     window->image.x=0;
  208.     window->image.y=0;
  209.     /*
  210. ***************
  211. *** 3156,3168 ****
  212.           if (map_info->colormap != XDefaultColormap(display,visual_info->screen))
  213.             if (event.xcrossing.mode != NotifyUngrab)
  214.               XInductColormap(display,map_info->colormap);
  215. -         if (window->backdrop.id != (Window) NULL)
  216. -           if (event.xbutton.window == window->image.id)
  217. -             {
  218. -               XInstallColormap(display,map_info->colormap);
  219. -               XSetInputFocus(display,window->image.id,RevertToNone,CurrentTime);
  220. -               break;
  221. -             }
  222.           break;
  223.         }
  224.         case Expose:
  225. --- 3157,3162 ----
  226. ***************
  227. *** 3284,3289 ****
  228. --- 3278,3289 ----
  229.             (void) fprintf(stderr,"Map Notify: 0x%lx\n",event.xmap.window);
  230.           if (event.xmap.window == window->image.id)
  231.             {
  232. +             if (window->backdrop.id != (Window) NULL)
  233. +               {
  234. +                 XInstallColormap(display,map_info->colormap);
  235. +                 XSetInputFocus(display,window->image.id,RevertToNone,
  236. +                   CurrentTime);
  237. +               }
  238.               if ((window->image.width < window->image.ximage->width) ||
  239.                   (window->image.height < window->image.ximage->height))
  240.                 XMapRaised(display,window->pan.id);
  241. diff -r -c ImageMagick/display.h ImageMagick2.2.5/display.h
  242. *** ImageMagick/display.h    Wed Jan  6 17:56:09 1993
  243. --- ImageMagick2.2.5/display.h    Wed Jan 13 17:02:15 1993
  244. ***************
  245. *** 51,55 ****
  246.   */
  247.   #ifndef lint
  248.   static char 
  249. !   Version[]="@(#)ImageMagick 2.2.3 93/01/01 cristy@dupont.com";
  250.   #endif
  251. --- 51,55 ----
  252.   */
  253.   #ifndef lint
  254.   static char 
  255. !   Version[]="@(#)ImageMagick 2.2.5 93/01/13 cristy@dupont.com";
  256.   #endif
  257. diff -r -c ImageMagick/image.c ImageMagick2.2.5/image.c
  258. *** ImageMagick/image.c    Wed Jan  6 17:56:08 1993
  259. --- ImageMagick2.2.5/image.c    Wed Jan 13 16:58:11 1993
  260. ***************
  261. *** 89,95 ****
  262.   %
  263.   %    o allocated_image: Function AllocateImage returns a pointer to an image
  264.   %      structure initialized to default values.  A null image is returned if
  265. ! %      there is a a memory shortage or if the image cannot be read.
  266.   %
  267.   %    o magick: Specifies the image format (i.e. MIFF, GIF, JPEG, etc.).
  268.   %
  269. --- 89,95 ----
  270.   %
  271.   %    o allocated_image: Function AllocateImage returns a pointer to an image
  272.   %      structure initialized to default values.  A null image is returned if
  273. ! %      there is a memory shortage.
  274.   %
  275.   %    o magick: Specifies the image format (i.e. MIFF, GIF, JPEG, etc.).
  276.   %
  277. Common subdirectories: ImageMagick/images and ImageMagick2.2.5/images
  278. diff -r -c ImageMagick/miff.man ImageMagick2.2.5/miff.man
  279. *** ImageMagick/miff.man    Wed Jan  6 17:55:54 1993
  280. --- ImageMagick2.2.5/miff.man    Wed Jan 13 16:58:26 1993
  281. ***************
  282. *** 146,153 ****
  283.   intensity value (and optional alpha value) is encoded using the predictive
  284.   arithmetic compression algorithm.  Use the \fBpackets\fP keyword to specify
  285.   the total number of arithimetic encoded packets that comprise the image.
  286. - Refer to "JPEG-9-R6 Working Draft for Development of JPEG CD", January
  287. - 1992, for implementation specific details.
  288.   .PP
  289.   If \fBcompression\fP is \fIRunlengthEncoded\fP, each red, green, and
  290.   blue byte intensity value (and optional alpha value) is followed by a
  291. --- 146,151 ----
  292. diff -r -c ImageMagick/montage.man ImageMagick2.2.5/montage.man
  293. *** ImageMagick/montage.man    Wed Jan  6 17:55:54 1993
  294. --- ImageMagick2.2.5/montage.man    Wed Jan 13 16:58:27 1993
  295. ***************
  296. *** 192,198 ****
  297.   .B replace
  298.   The resulting image is \fIcomposite image\fP replaced with \fIimage\fP.
  299.   Here the alpha information is ignored.
  300. ! .PP
  301.   The image compositor requires an alpha, or matte channel in the image
  302.   for some operations.  This extra channel usually defines a mask which
  303.   represents a sort of a cookie-cutter for the image.  This is the case
  304. --- 192,198 ----
  305.   .B replace
  306.   The resulting image is \fIcomposite image\fP replaced with \fIimage\fP.
  307.   Here the alpha information is ignored.
  308.   The image compositor requires an alpha, or matte channel in the image
  309.   for some operations.  This extra channel usually defines a mask which
  310.   represents a sort of a cookie-cutter for the image.  This is the case
  311. Common subdirectories: ImageMagick/scenes and ImageMagick2.2.5/scenes
  312. Common subdirectories: ImageMagick/utilities and ImageMagick2.2.5/utilities
  313. Common subdirectories: ImageMagick/xtp and ImageMagick2.2.5/xtp
  314. diff -r -c ImageMagick/utilities/convert.c ImageMagick2.2.5/utilities/convert.c
  315. *** ImageMagick/utilities/convert.c    Wed Jan  6 17:56:31 1993
  316. --- ImageMagick2.2.5/utilities/convert.c    Wed Jan 13 16:58:40 1993
  317. ***************
  318. *** 44,50 ****
  319.   %
  320.   %  The convert program syntax is:
  321.   %
  322. ! %  Usage: convert [options ...] file
  323.   %
  324.   %  Where options include:
  325.   %    -alpha              store alpha channel if the image has one
  326. --- 44,50 ----
  327.   %
  328.   %  The convert program syntax is:
  329.   %
  330. ! %  Usage: convert [options ...] input_file output_file
  331.   %
  332.   %  Where options include:
  333.   %    -alpha              store alpha channel if the image has one
  334. ***************
  335. *** 257,265 ****
  336. --- 257,267 ----
  337.     colorspace=RGBColorspace;
  338.     compression=UndefinedCompression;
  339.     dither=False;
  340. +   image=(Image *) NULL;
  341.     number_colors=0;
  342.     quality=0;
  343.     scene=0;
  344. +   start_time=time((time_t *) 0);
  345.     tree_depth=0;
  346.     verbose=False;
  347.     /*
  348. ***************
  349. *** 270,276 ****
  350.     {
  351.       option=argv[i];
  352.       if (((int) strlen(option) < 2) || ((*option != '-') && (*option != '+')))
  353. !       filename=argv[i];
  354.       else
  355.         switch(*(option+1))
  356.         {
  357. --- 272,289 ----
  358.     {
  359.       option=argv[i];
  360.       if (((int) strlen(option) < 2) || ((*option != '-') && (*option != '+')))
  361. !       {
  362. !         /*
  363. !           Read input image.
  364. !         */
  365. !         filename=option;
  366. !         (void) strcpy(alien_info.filename,filename);
  367. !         if (image != (Image *) NULL)
  368. !           Error("input image already specified",filename);
  369. !         image=ReadAlienImage(&alien_info);
  370. !         if (image == (Image *) NULL)
  371. !           exit(1);
  372. !       }
  373.       else
  374.         switch(*(option+1))
  375.         {
  376. ***************
  377. *** 448,460 ****
  378.           }
  379.         }
  380.     }
  381. -   if (filename == (char *) NULL)
  382. -     Error("missing an image file name",(char *) NULL);
  383. -   start_time=time((time_t *) 0);
  384. -   (void) strcpy(alien_info.filename,filename);
  385. -   image=ReadAlienImage(&alien_info);
  386.     if (image == (Image *) NULL)
  387. !     exit(1);
  388.     /*
  389.       Write images.
  390.     */
  391. --- 461,468 ----
  392.           }
  393.         }
  394.     }
  395.     if (image == (Image *) NULL)
  396. !     Error("missing an image file name",(char *) NULL);
  397.     /*
  398.       Write images.
  399.     */
  400. diff -r -c ImageMagick/xtp/network.c ImageMagick2.2.5/xtp/network.c
  401. *** ImageMagick/xtp/network.c    Wed Jan  6 17:56:41 1993
  402. --- ImageMagick2.2.5/xtp/network.c    Wed Jan 13 16:58:56 1993
  403. ***************
  404. *** 47,52 ****
  405. --- 47,57 ----
  406.   #include "xtp.h"
  407.   #include "regular.h"
  408.   #include <unistd.h>
  409. + #include <sys/socket.h>
  410. + #include <netinet/in.h>
  411. + #include <netdb.h>
  412. + #include <arpa/inet.h>
  413.   
  414.   /*
  415.   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  416. ***************
  417. *** 81,91 ****
  418.   char
  419.     *name;
  420.   {
  421. - #include <sys/socket.h>
  422. - #include <netinet/in.h>
  423. - #include <netdb.h>
  424. - #include <arpa/inet.h>
  425.     char
  426.       info[2048],
  427.       *p;
  428. --- 86,91 ----
  429. Only in ImageMagick2.2.5/xtp: xtp
  430. diff -r -c ImageMagick/xtp/xtp.c ImageMagick2.2.5/xtp/xtp.c
  431. *** ImageMagick/xtp/xtp.c    Wed Jan  6 17:56:42 1993
  432. --- ImageMagick2.2.5/xtp/xtp.c    Wed Jan 13 16:58:57 1993
  433. ***************
  434. *** 252,260 ****
  435.       Condition slave tty line.
  436.     */
  437.     (void) tcgetattr(slave,&attributes);
  438. !   attributes.c_cflag|=HUPCL;
  439. !   attributes.c_lflag&=(~(ICANON | ECHO));
  440.     attributes.c_oflag&=(~OPOST);
  441.     (void) tcflush(slave,TCIFLUSH);
  442.     (void) tcsetattr(slave,TCSANOW,&attributes);
  443.     /*
  444. --- 252,265 ----
  445.       Condition slave tty line.
  446.     */
  447.     (void) tcgetattr(slave,&attributes);
  448. !   attributes.c_iflag&=(~(BRKINT | IGNPAR | PARMRK | INPCK | ISTRIP | INLCR |
  449. !     IGNCR | ICRNL | IXON));
  450. !   attributes.c_iflag|=IGNBRK | IXOFF;
  451.     attributes.c_oflag&=(~OPOST);
  452. +   attributes.c_lflag&=
  453. +     (~(ECHO | ECHOE | ECHOK | ECHONL | ICANON | ISIG | NOFLSH | TOSTOP));
  454. +   attributes.c_cflag&=(~(CSIZE | CSTOPB | HUPCL | PARENB));
  455. +   attributes.c_cflag|=CLOCAL | CREAD | CS8;
  456.     (void) tcflush(slave,TCIFLUSH);
  457.     (void) tcsetattr(slave,TCSANOW,&attributes);
  458.     /*
  459. ***************
  460. *** 376,381 ****
  461. --- 381,387 ----
  462.                 */
  463.                 (void) tcgetattr(master,&attributes);
  464.                 attributes.c_lflag&=(~(ICANON | ECHO));
  465. +               (void) tcflush(master,TCIFLUSH);
  466.                 (void) tcsetattr(master,TCSANOW,&attributes);
  467.                 return;
  468.               }
  469. ***************
  470. *** 499,507 ****
  471.     */
  472.     (void) sprintf(command,"get %s",filename);
  473.     if (strcmp(filename+strlen(filename)-2,".Z"))
  474. !     (void) strcat(command," -\r");
  475.     else
  476. !     (void) strcat(command," |zcat\r");
  477.     (void) write(master,command,strlen(command));
  478.     (void) fprintf(stdout,"%s:\n",filename);
  479.     while (response=Wait())
  480. --- 505,513 ----
  481.     */
  482.     (void) sprintf(command,"get %s",filename);
  483.     if (strcmp(filename+strlen(filename)-2,".Z"))
  484. !     (void) strcat(command," -\n");
  485.     else
  486. !     (void) strcat(command," |zcat\n");
  487.     (void) write(master,command,strlen(command));
  488.     (void) fprintf(stdout,"%s:\n",filename);
  489.     while (response=Wait())
  490. ***************
  491. *** 594,600 ****
  492.         /*
  493.           Obtain a time sorted recursive directory if available.
  494.         */
  495. !       (void) strcpy(command,"get ls-ltR.Z |zcat\r");
  496.         (void) write(master,command,strlen(command));
  497.         while (response=Wait())
  498.           if ((status == 0) || (status == 5))
  499. --- 600,606 ----
  500.         /*
  501.           Obtain a time sorted recursive directory if available.
  502.         */
  503. !       (void) strcpy(command,"get ls-ltR.Z |zcat\n");
  504.         (void) write(master,command,strlen(command));
  505.         while (response=Wait())
  506.           if ((status == 0) || (status == 5))
  507. ***************
  508. *** 605,611 ****
  509.               Obtain a recursive directory if available.
  510.             */
  511.             while (Wait());
  512. !           (void) strcpy(command,"get ls-lR.Z |zcat\r");
  513.             (void) write(master,command,strlen(command));
  514.             while (response=Wait())
  515.               if ((status == 0) || (status == 5))
  516. --- 611,617 ----
  517.               Obtain a recursive directory if available.
  518.             */
  519.             while (Wait());
  520. !           (void) strcpy(command,"get ls-lR.Z |zcat\n");
  521.             (void) write(master,command,strlen(command));
  522.             while (response=Wait())
  523.               if ((status == 0) || (status == 5))
  524. ***************
  525. *** 625,631 ****
  526.           Determine if the FTP server has unix-style filenames.
  527.         */
  528.         mode_expression=CompileRegularExpression("^.[rwx-][rwx-][rwx-]");
  529. !       (void) strcpy(command,"dir\r");
  530.         (void) write(master,command,strlen(command));
  531.         while (response=Wait())
  532.           if (!unix_filesystem)
  533. --- 631,637 ----
  534.           Determine if the FTP server has unix-style filenames.
  535.         */
  536.         mode_expression=CompileRegularExpression("^.[rwx-][rwx-][rwx-]");
  537. !       (void) strcpy(command,"dir\n");
  538.         (void) write(master,command,strlen(command));
  539.         while (response=Wait())
  540.           if (!unix_filesystem)
  541. ***************
  542. *** 636,647 ****
  543.           Obtain recursive directory listing with the FTP directory command.
  544.         */
  545.         if (prune)
  546. !         (void) strcpy(command,"dir\r");
  547.         else
  548.           if (unix_filesystem)
  549. !           (void) strcpy(command,"ls -ltR\r");
  550.           else
  551. !           (void) strcpy(command,"ls [...]\r");
  552.         (void) write(master,command,strlen(command));
  553.         while (response=Wait())
  554.           if ((status == 0) || (status == 5))
  555. --- 642,653 ----
  556.           Obtain recursive directory listing with the FTP directory command.
  557.         */
  558.         if (prune)
  559. !         (void) strcpy(command,"dir\n");
  560.         else
  561.           if (unix_filesystem)
  562. !           (void) strcpy(command,"ls -ltR\n");
  563.           else
  564. !           (void) strcpy(command,"ls [...]\n");
  565.         (void) write(master,command,strlen(command));
  566.         while (response=Wait())
  567.           if ((status == 0) || (status == 5))
  568. ***************
  569. *** 652,658 ****
  570.               Directory command has limited functionality.
  571.             */
  572.             while (Wait());
  573. !           (void) strcpy(command,"dir\r");
  574.             (void) write(master,command,strlen(command));
  575.             while (response=Wait())
  576.               if (status == 0)
  577. --- 658,664 ----
  578.               Directory command has limited functionality.
  579.             */
  580.             while (Wait());
  581. !           (void) strcpy(command,"dir\n");
  582.             (void) write(master,command,strlen(command));
  583.             while (response=Wait())
  584.               if (status == 0)
  585. ***************
  586. *** 855,861 ****
  587.       get remote-file
  588.     */
  589.     (void) MakeDirectory(filename);
  590. !   (void) sprintf(command,"get %s\r",filename);
  591.     (void) write(master,command,strlen(command));
  592.     while (response=Wait())
  593.       if (status == 0)
  594. --- 861,867 ----
  595.       get remote-file
  596.     */
  597.     (void) MakeDirectory(filename);
  598. !   (void) sprintf(command,"get %s\n",filename);
  599.     (void) write(master,command,strlen(command));
  600.     while (response=Wait())
  601.       if (status == 0)
  602. ***************
  603. *** 1229,1235 ****
  604.     while (response=Wait())
  605.       if (verbose)
  606.         (void) fprintf(stderr,"%s\n",response);
  607. !   (void) sprintf(command,"user %s %s\r",user,ident);
  608.     (void) write(master,command,strlen(command));
  609.     while (response=Wait())
  610.     {
  611. --- 1235,1241 ----
  612.     while (response=Wait())
  613.       if (verbose)
  614.         (void) fprintf(stderr,"%s\n",response);
  615. !   (void) sprintf(command,"user %s %s\n",user,ident);
  616.     (void) write(master,command,strlen(command));
  617.     while (response=Wait())
  618.     {
  619. ***************
  620. *** 1245,1251 ****
  621.         /*
  622.           Change remote working directory.
  623.         */
  624. !       (void) sprintf(command,"cd %s\r",home_directory);
  625.         (void) write(master,command,strlen(command));
  626.         while (response=Wait())
  627.         {
  628. --- 1251,1257 ----
  629.         /*
  630.           Change remote working directory.
  631.         */
  632. !       (void) sprintf(command,"cd %s\n",home_directory);
  633.         (void) write(master,command,strlen(command));
  634.         while (response=Wait())
  635.         {
  636. ***************
  637. *** 1254,1260 ****
  638.           if (status == 5)
  639.             Error("no such directory",home_directory);
  640.         }
  641. !       (void) strcpy(command,"pwd\r");
  642.         (void) write(master,command,strlen(command));
  643.         while (response=Wait())
  644.           if (verbose)
  645. --- 1260,1266 ----
  646.           if (status == 5)
  647.             Error("no such directory",home_directory);
  648.         }
  649. !       (void) strcpy(command,"pwd\n");
  650.         (void) write(master,command,strlen(command));
  651.         while (response=Wait())
  652.           if (verbose)
  653. ***************
  654. *** 1265,1276 ****
  655.         /*
  656.           Set file transfer type.
  657.         */
  658. !       (void) strcpy(command,"binary\r");
  659.         (void) write(master,command,strlen(command));
  660.         while (response=Wait())
  661.           if (verbose)
  662.             (void) fprintf(stderr,"%s\n",response);
  663. !       (void) strcpy(command,"type\r");
  664.         (void) write(master,command,strlen(command));
  665.         while (response=Wait())
  666.           if (verbose)
  667. --- 1271,1282 ----
  668.         /*
  669.           Set file transfer type.
  670.         */
  671. !       (void) strcpy(command,"binary\n");
  672.         (void) write(master,command,strlen(command));
  673.         while (response=Wait())
  674.           if (verbose)
  675.             (void) fprintf(stderr,"%s\n",response);
  676. !       (void) strcpy(command,"type\n");
  677.         (void) write(master,command,strlen(command));
  678.         while (response=Wait())
  679.           if (verbose)
  680. ***************
  681. *** 1281,1287 ****
  682.         /*
  683.           Ensure retrieved files are unique.
  684.         */
  685. !       (void) strcpy(command,"runique\r");
  686.         (void) write(master,command,strlen(command));
  687.         while (response=Wait())
  688.           if (verbose)
  689. --- 1287,1293 ----
  690.         /*
  691.           Ensure retrieved files are unique.
  692.         */
  693. !       (void) strcpy(command,"runique\n");
  694.         (void) write(master,command,strlen(command));
  695.         while (response=Wait())
  696.           if (verbose)
  697. ***************
  698. *** 1294,1311 ****
  699.         /*
  700.           Process send request.
  701.         */
  702. !       (void) strcpy(command,"glob on\r");
  703.         (void) write(master,command,strlen(command));
  704.         while (response=Wait())
  705.           if (verbose)
  706.             (void) fprintf(stderr,"%s\n",response);
  707. !       (void) sprintf(command,"mput %s\r",send_expression);
  708.         (void) write(master,command,strlen(command));
  709.         while (response=Wait())
  710.           if ((status == 5) || verbose)
  711.             (void) fprintf(stderr,"%s\n",response);
  712.       }
  713. !   (void) strcpy(command,"quit\r");
  714.     (void) write(master,command,strlen(command));
  715.     /*
  716.       Wait for child to finish.
  717. --- 1300,1317 ----
  718.         /*
  719.           Process send request.
  720.         */
  721. !       (void) strcpy(command,"glob on\n");
  722.         (void) write(master,command,strlen(command));
  723.         while (response=Wait())
  724.           if (verbose)
  725.             (void) fprintf(stderr,"%s\n",response);
  726. !       (void) sprintf(command,"mput %s\n",send_expression);
  727.         (void) write(master,command,strlen(command));
  728.         while (response=Wait())
  729.           if ((status == 5) || verbose)
  730.             (void) fprintf(stderr,"%s\n",response);
  731.       }
  732. !   (void) strcpy(command,"quit\n");
  733.     (void) write(master,command,strlen(command));
  734.     /*
  735.       Wait for child to finish.
  736. -- 
  737. cristy@dupont.com
  738.  
  739. exit 0 # Just in case...
  740.