*** nkf.c.orig	Thu Nov  7 05:04:27 1996
--- nkf.c	Sat Feb  6 03:48:38 1999
***************
*** 8,13 ****
--- 8,14 ----
  ** $B!J(BE-Mail Address: kono@ie.u-ryukyu.ac.jp$B!K(B
  ** $BO"Mm@h!'(B COW for DOS & Win16 & Win32 & OS/2
  ** $B!J(BE-Mail Address: GHG00637@niftyserve.or.jp$B!K(B
+ **
  **    $B1DMx$rL\E*$H$7$J$$8B$j!"$3$N%=!<%9$N$$$+$J$k(B
  **    $BJ#<L!$2~JQ!$=$@5$b5vBz$7$^$9!#$=$N:]$K$O!"$3$NItJ,$r;D$9$3$H!#(B
  **    $B$3$N%W%m%0%i%`$K$D$$$F$OFC$K2?$NJ]>Z$b$7$J$$!"0-$7$+$i$:!#(B
***************
*** 63,68 ****
--- 64,70 ----
  ** B[1-9]  broken level
  **
  ** O   Output to 'nkf.out' file 
+ ** W  Overwrite
  ** d   Delete \r in line feed 
  ** c   Add \r in line feed 
  **/
***************
*** 115,120 ****
--- 117,127 ----
  #include <windows.h>
  #endif
  
+ /* added by satoru@isoternet.org */
+ #include <sys/stat.h>
+ #include <utime.h>
+ 
+ 
  #define         FALSE   0
  #define         TRUE    1
  
***************
*** 226,231 ****
--- 233,239 ----
  extern unsigned char cv[],dv[],ev[],fv[];
  
  int             file_out = FALSE;
+ int             overwrite = FALSE;
  int             add_cr = FALSE;
  int             del_cr = FALSE;
  int             end_check;
***************
*** 396,401 ****
--- 404,413 ----
              case 'O':/* for Output file */
                  file_out = TRUE;
                  continue;
+             case 'W':/* overwrite */
+ 		file_out  = TRUE;
+                 overwrite = TRUE;
+                 continue;
              case 'c':/* add cr code */
                  add_cr = TRUE;
                  continue;
***************
*** 441,463 ****
            convert (stdin);
      } else {
        while (argc--) {
            if((fin = fopen (*argv++, "r")) == NULL) {
                perror (*--argv);
                return (-1);
            } else {
  /* reopen file for stdout */
                if(file_out == TRUE){ 
!                   if(argc == 1 ) {
!                       if(freopen(*argv++, "w", stdout) == NULL) {
!                           perror (*--argv);
!                           return (-1);
!                       }
!                       argc--;
!                   } else {
!                       if(freopen("nkf.out", "w", stdout) == NULL) {
!                          perror (*--argv);
!                          return (-1);
!                       }
                    }
                    if(binmode_f == TRUE) {
  #ifdef __OS2__
--- 453,471 ----
            convert (stdin);
      } else {
        while (argc--) {
+           char *outfname = "nkf.out";
            if((fin = fopen (*argv++, "r")) == NULL) {
                perror (*--argv);
                return (-1);
            } else {
  /* reopen file for stdout */
                if(file_out == TRUE){ 
!                   if (overwrite) {
!                       outfname = tempnam(".", "nkftmp");
!                   }
!                   if(freopen(outfname, "w", stdout) == NULL) {
!                       perror (*--argv);
!                       return (-1);
                    }
                    if(binmode_f == TRUE) {
  #ifdef __OS2__
***************
*** 481,486 ****
--- 489,520 ----
                else
                    convert (fin);
                fclose (fin);
+               if (overwrite) {
+                   char *origfname = *(argv -1);
+                   struct stat     sb;
+                   struct utimbuf  tb;
+ 
+                   fclose(stdout);
+                   if (stat(origfname, &sb)) {
+                       fprintf(stderr, "Can't stat %s\n", origfname);
+                   }
+                   tb.actime  = sb.st_atime;
+                   tb.modtime = sb.st_mtime;
+     
+                   if (rename(outfname, origfname)) {
+                       fprintf(stderr, "Can't rename %s to %s\n",
+                               outfname, origfname);
+                   }
+ 
+                   /* $B%?%$%`%9%?%s%W$rI|85(B */
+                   if (utime(origfname, &tb)) {
+                       fprintf(stderr, "Can't set timestamp %s\n", origfname);
+                   }
+                   /* $B%Q!<%_%C%7%g%s$rI|85(B */
+                   if (chmod(origfname, sb.st_mode)) {
+                       fprintf(stderr, "Can't set permission %s\n", origfname);
+                   }
+               }
            }
        }
      }
***************
*** 1748,1753 ****
--- 1782,1788 ----
      fprintf(stderr,"T        Text mode output\n");
  #endif
      fprintf(stderr,"O        Output to File (DEFAULT 'nkf.out')\n");
+     fprintf(stderr,"W        Overwrite\n");
      fprintf(stderr,"d,c      Delete \\r in line feed, Add \\r in line feed\n");
      fprintf(stderr,"Network Kanji Filter Version %s (%s) "
  #if defined(MSDOS) && !defined(_Windows)
