しらいです。

 file & directory 管理ツール FDclone 2.07a の patch です。

 この記事をファイル (FILE01 とします) に ISO-2022-JP encoding
の JIS-X0208-1997 (ESC-$-B) 形式でセーブし、FDclone 2.07 の
あるディレクトリで以下のコマンドを実行して下さい。
        sed '1,/^---- Cut Here/d' FILE01 | sh
        cat FD-2.07a.patch | patch -p0
 例えば nkf を使ってコード変換する場合は、「nkf -j -iB -oB」
で convert すると正しい漢字コードになる筈です。

 以下は HISTORY より今回の変更点の抜粋です。

        表示すべきファイルがない時に画面が更新されない不具合を修正。
        Darwin (Mac OS X) 環境で起動に失敗する点を修正。
        内蔵シェルで `` に囲まれた \ を評価するように仕様変更。
        内蔵シェルで新規ファイル記述子へリダイレクト出来ない点を修正。

MD5 (FD-2.07a.patch) = 905968fcebd51a83043f23f8df7553f9

Submitted-by: shirai@chandra2
Archive-name: FD-2.07a.patch/part01

---- Cut Here and feed the following to sh ----
#!/bin/sh
# This is FD-2.07a.patch, a shell archive (produced by GNU sharutils 4.2)
# To extract the files from this archive, save it to some FILE, remove
# everything before the `!/bin/sh' line above, then type `sh FILE'.
#
# Made on 2005-06-22 00:00 JST by <shirai@chandra2>.
# Source directory was `/usr/home/shirai/src/fd2'.
#
# Existing files will *not* be overwritten unless `-c' is specified.
#
#                                                                          
#                                                                          
#
# This shar contains:
# length mode       name
# ------ ---------- ------------------------------------------
#  14756 -rw-r--r-- FD-2.07a.patch
#
echo=echo
touch -am 1231235999 $$.touch >/dev/null 2>&1
if test ! -f 1231235999 && test -f $$.touch; then
  shar_touch=touch
else
  shar_touch=:
  echo
  $echo 'WARNING: not restoring timestamps.  Consider getting and'
  $echo "installing GNU \`touch', distributed in GNU File Utilities..."
  echo
fi
rm -f 1231235999 $$.touch
#
if mkdir _sh00360; then
  $echo 'x -' 'creating lock directory'
else
  $echo 'failed to create lock directory'
  exit 1
fi
if test -r _sh00360/seq; then
  $echo 'Must unpack archives in sequence!'
  $echo 'Please unpack part' '`cat _sh00360/seq`' 'next!'
  exit 1
fi
# ============= FD-2.07a.patch ==============
if test -f 'FD-2.07a.patch' && test "$first_param" != -c; then
  $echo 'x -' SKIPPING 'FD-2.07a.patch' '(file already exists)'
  rm -f _sh00360/new
else
  > _sh00360/new
  $echo 'x -' extracting 'FD-2.07a.patch' '(text)'
  sed 's/^X//' << 'SHAR_EOF' > 'FD-2.07a.patch' &&
diff -urNP ../FD-2.07/HISTORY ./HISTORY
--- ../FD-2.07/HISTORY  Thu May 26 00:00:00 2005
+++ ./HISTORY   Wed Jun 22 00:00:00 2005
@@ -1,3 +1,8 @@
+Ver. 2.07a     表示すべきファイルがない時に画面が更新されない不具合を修正。
+ (06/22/05)    Darwin (Mac OS X) 環境で起動に失敗する点を修正。
+               内蔵シェルで `` に囲まれた \ を評価するように仕様変更。
+               内蔵シェルで新規ファイル記述子へリダイレクト出来ない点を修正。
+
X Ver. 2.07     内部変数 PTYMODE, PTYTERM, PTYMENUKEY の追加。
X  (05/26/05)   内部変数 DEFKCODE の追加。
X               分割ウィンドウの最大数を 5 に拡張。
diff -urNP ../FD-2.07/HISTORY.eng ./HISTORY.eng
--- ../FD-2.07/HISTORY.eng      Thu May 26 00:00:00 2005
+++ ./HISTORY.eng       Wed Jun 22 00:00:00 2005
@@ -1,3 +1,8 @@
+Ver. 2.07a     Bug that the screen is not updated with no file is fixed.
+ (06/22/05)    Failure to be invoked on Darwin (Mac OS X) is fixed.
+               Allow evaluation of \ included in `` with the internal shell.
+               Faliure to redirect to a new file descriptor is fixed.
+
X Ver. 2.07     Add 'PTYMODE', 'PTYTERM' and 'PTYMENUKEY' internal variables.
X  (05/26/05)   Add 'DEFKCODE' internal variable.
X               Expand the maximum number of split windows into 5.
diff -urNP ../FD-2.07/README ./README
--- ../FD-2.07/README   Thu May 26 00:00:00 2005
+++ ./README    Wed Jun 22 00:00:00 2005
@@ -3,7 +3,7 @@
X #     FDclone Ver. 2.07 に関して
X #
X #     Takashi SHIRAI, <shirai@unixusers.net>
-#      May 26, 2005
+#      Jun 22, 2005
X #
X ############################################################
X 
diff -urNP ../FD-2.07/README.eng ./README.eng
--- ../FD-2.07/README.eng       Thu May 26 00:00:00 2005
+++ ./README.eng        Wed Jun 22 00:00:00 2005
@@ -3,7 +3,7 @@
X #     About FDclone Ver. 2.07
X #
X #     Takashi SHIRAI, <shirai@unixusers.net>
-#      May 26, 2005
+#      Jun 22, 2005
X #
X ############################################################
X 
diff -urNP ../FD-2.07/browse.c ./browse.c
--- ../FD-2.07/browse.c Thu May 26 00:00:00 2005
+++ ./browse.c  Wed Jun 22 00:00:00 2005
@@ -1175,12 +1175,14 @@
X                       if (custno >= 0) rewritecust();
X                       else
X # endif
-                       if (filelist && filepos < maxfile)
+                       if (filelist
+                       && (filepos < maxfile || (!filepos && !maxfile)))
X                               n = listupfile(filelist, maxfile, def, 1);
X                       x = win_x;
X                       y = win_y;
X               }
-               else if (filelist && filepos < maxfile)
+               else if (filelist
+               && (filepos < maxfile || (!filepos && !maxfile)))
X                       listupfile(filelist, maxfile,
X                               filelist[filepos].name, 0);
X       }
diff -urNP ../FD-2.07/fd.man ./fd.man
--- ../FD-2.07/fd.man   Thu May 26 00:00:00 2005
+++ ./fd.man    Wed Jun 22 00:00:00 2005
@@ -2,9 +2,9 @@
X .\" Copyright (c) 1995-2005 Takashi SHIRAI
X .\"                    <shirai@unixusers.net>
X .\"
-.\" @(#)fd.1   2.07 05/26/05
+.\" @(#)fd.1   2.07a 06/22/05
X .\"   fd - File & Directory maintenance tool
-.TH FD 1 "May 26, 2005"
+.TH FD 1 "June 22, 2005"
X .de sh
X .br
X .PP
diff -urNP ../FD-2.07/fd_e.man ./fd_e.man
--- ../FD-2.07/fd_e.man Thu May 26 00:00:00 2005
+++ ./fd_e.man  Wed Jun 22 00:00:00 2005
@@ -2,9 +2,9 @@
X .\" Copyright (c) 1995-2005 Takashi SHIRAI
X .\"                    <shirai@unixusers.net>
X .\"
-.\" @(#)fd.1   2.07 05/26/05
+.\" @(#)fd.1   2.07a 06/22/05
X .\"   fd - File & Directory maintenance tool
-.TH FD 1 "May 26, 2005"
+.TH FD 1 "June 22, 2005"
X .de sh
X .br
X .PP
diff -urNP ../FD-2.07/makefile.b98 ./makefile.b98
--- ../FD-2.07/makefile.b98     Thu May 26 00:00:00 2005
+++ ./makefile.b98      Wed Jun 22 00:00:00 2005
@@ -4,7 +4,7 @@
X 
X TITLE = FD-
X VERSION       = 2
-VER    = 2.07
+VER    = 2.07a
X PREFIX        = 
X CONFDIR       = 
X BUILD =
diff -urNP ../FD-2.07/makefile.bpc ./makefile.bpc
--- ../FD-2.07/makefile.bpc     Thu May 26 00:00:00 2005
+++ ./makefile.bpc      Wed Jun 22 00:00:00 2005
@@ -4,7 +4,7 @@
X 
X TITLE = FD-
X VERSION       = 2
-VER    = 2.07
+VER    = 2.07a
X PREFIX        = 
X CONFDIR       = 
X BUILD =
diff -urNP ../FD-2.07/makefile.d98 ./makefile.d98
--- ../FD-2.07/makefile.d98     Thu May 26 00:00:00 2005
+++ ./makefile.d98      Wed Jun 22 00:00:00 2005
@@ -4,7 +4,7 @@
X 
X TITLE = FD-
X VERSION       = 2
-VER    = 2.07
+VER    = 2.07a
X PREFIX        = 
X CONFDIR       = 
X BUILD =
diff -urNP ../FD-2.07/makefile.dpc ./makefile.dpc
--- ../FD-2.07/makefile.dpc     Thu May 26 00:00:00 2005
+++ ./makefile.dpc      Wed Jun 22 00:00:00 2005
@@ -4,7 +4,7 @@
X 
X TITLE = FD-
X VERSION       = 2
-VER    = 2.07
+VER    = 2.07a
X PREFIX        = 
X CONFDIR       = 
X BUILD =
diff -urNP ../FD-2.07/makefile.g98 ./makefile.g98
--- ../FD-2.07/makefile.g98     Thu May 26 00:00:00 2005
+++ ./makefile.g98      Wed Jun 22 00:00:00 2005
@@ -4,7 +4,7 @@
X 
X TITLE = FD-
X VERSION       = 2
-VER    = 2.07
+VER    = 2.07a
X PREFIX        = 
X CONFDIR       = 
X BUILD =
diff -urNP ../FD-2.07/makefile.gpc ./makefile.gpc
--- ../FD-2.07/makefile.gpc     Thu May 26 00:00:00 2005
+++ ./makefile.gpc      Wed Jun 22 00:00:00 2005
@@ -4,7 +4,7 @@
X 
X TITLE = FD-
X VERSION       = 2
-VER    = 2.07
+VER    = 2.07a
X PREFIX        = 
X CONFDIR       = 
X BUILD =
diff -urNP ../FD-2.07/makefile.l98 ./makefile.l98
--- ../FD-2.07/makefile.l98     Thu May 26 00:00:00 2005
+++ ./makefile.l98      Wed Jun 22 00:00:00 2005
@@ -4,7 +4,7 @@
X 
X TITLE = FD-
X VERSION       = 2
-VER    = 2.07
+VER    = 2.07a
X PREFIX        = 
X CONFDIR       = 
X BUILD =
diff -urNP ../FD-2.07/makefile.lpc ./makefile.lpc
--- ../FD-2.07/makefile.lpc     Thu May 26 00:00:00 2005
+++ ./makefile.lpc      Wed Jun 22 00:00:00 2005
@@ -4,7 +4,7 @@
X 
X TITLE = FD-
X VERSION       = 2
-VER    = 2.07
+VER    = 2.07a
X PREFIX        = 
X CONFDIR       = 
X BUILD =
diff -urNP ../FD-2.07/pathname.c ./pathname.c
--- ../FD-2.07/pathname.c       Thu May 26 00:00:00 2005
+++ ./pathname.c        Wed Jun 22 00:00:00 2005
@@ -183,7 +183,7 @@
X       char *, int, int));
X static int NEAR completeexe __P_((char *, int, int, char ***));
X #endif        /* !FDSH && !_NOCOMPLETE */
-static int NEAR addmeta __P_((char *, char *, int, int));
+static int NEAR addmeta __P_((char *, char *, int));
X static int NEAR skipvar __P_((char **, int *, int *, int));
X #ifdef        MINIMUMSHELL
X static int NEAR skipvarvalue __P_((char *, int *, char *, int, int));
@@ -2154,39 +2154,26 @@
X }
X #endif        /* !FDSH && !_NOCOMPLETE */
X 
-static int NEAR addmeta(s1, s2, quoted, flags)
+static int NEAR addmeta(s1, s2, quoted)
X char *s1, *s2;
-int quoted, flags;
+int quoted;
X {
-       int i, j;
+       int i, j, pc, quote;
X 
X       if (!s2) return(0);
X       for (i = j = 0; s2[i]; i++, j++) {
-               if (s2[i] == '"') {
+               quote = quoted;
+               pc = parsechar(&(s2[i]), -1, '\0', EA_EOLMETA, &quote, NULL);
+               if (pc == PC_OPQUOTE || pc == PC_CLQUOTE || pc == PC_META) {
X                       if (s1) s1[j] = PMETA;
X                       j++;
X               }
-               else if (s2[i] == PMETA) {
-                       if (s1) s1[j] = PMETA;
-                       j++;
-                       if (!(flags & EA_KEEPMETA) && s2[i + 1] == PMETA) i++;
-               }
-               else if (!quoted && s2[i] == '\'') {
-                       if (s1) s1[j] = PMETA;
-                       j++;
-               }
-               else if (iskanji1(s2, i)) {
-                       if (s1) s1[j] = s2[i];
-                       j++;
-                       i++;
-               }
-#ifdef CODEEUC
-               else if (isekana(s2, i)) {
+               else if (pc == PC_WORD) {
X                       if (s1) s1[j] = s2[i];
X                       j++;
X                       i++;
X               }
-#endif
+
X               if (s1) s1[j] = s2[i];
X       }
X 
@@ -2273,21 +2260,17 @@
X #ifdef        CODEEUC
X       else if (isekana(s, 0)) return(PC_WORD);
X #endif
-#ifdef NESTINGQUOTE
-       else if (*qp == '`') return(PC_BQUOTE);
-#endif
X       else if (*qp == '\'') return(PC_SQUOTE);
-       else if (spc && *s == spc) return(*s);
X       else if (ismeta(s, 0, *qp, len, flags)) return(PC_META);
+       else if (*qp == '`') return(PC_BQUOTE);
X #ifdef        NESTINGQUOTE
X       else if ((flags & EA_BACKQ) && *s == '`') {
X               if (pqp && *qp) *pqp = *qp;
X               *qp = *s;
X               return(PC_OPQUOTE);
X       }
-#else
-       else if (*qp == '`') return(PC_BQUOTE);
X #endif
+       else if (spc && *s == spc) return(*s);
X       else if (*qp) return(PC_DQUOTE);
X       else if (!(flags & EA_NOEVALQ) && *s == '\'') {
X               *qp = *s;
@@ -2587,20 +2570,18 @@
X #endif
X 
X                       for (i = j = 0; arglist[i + 1]; i++)
-                               j += addmeta(NULL,
-                                       arglist[i + 1], quoted, EA_KEEPMETA);
+                               j += addmeta(NULL, arglist[i + 1], quoted);
X                       if (i <= 0) cp = strdup2("");
X                       else {
X                               j += (i - 1) * 3;
X                               cp = malloc2(j + 1);
-                               j = addmeta(cp, arglist[1],
-                                       quoted, EA_KEEPMETA);
+                               j = addmeta(cp, arglist[1], quoted);
X                               for (i = 2; arglist[i]; i++) {
X                                       cp[j++] = quoted;
X                                       cp[j++] = sp;
X                                       cp[j++] = quoted;
X                                       j += addmeta(&(cp[j]), arglist[i],
-                                               quoted, EA_KEEPMETA);
+                                               quoted);
X                               }
X                               cp[j] = '\0';
X                       }
@@ -2845,9 +2826,9 @@
X       }
X 
X       if (!mode && (c != '@' || !quoted)) {
-               vlen = addmeta(NULL, cp, quoted, EA_KEEPMETA);
+               vlen = addmeta(NULL, cp, quoted);
X               *bufp = insertarg(*bufp, ptr, arg, *argp - arg + 1, vlen);
-               addmeta(&((*bufp)[ptr]), cp, quoted, EA_KEEPMETA);
+               addmeta(&((*bufp)[ptr]), cp, quoted);
X       }
X       else if (!cp) vlen = 0;
X       else if (c == '@' && !*cp && quoted
@@ -3025,12 +3006,12 @@
X       char *tmp;
X       int len, size;
X 
-       stripquote(bbuf, 0);
+       stripquote(bbuf, EA_BACKQ);
X       if (!(tmp = (*backquotefunc)(bbuf))) return(buf);
-       len = addmeta(NULL, tmp, '\0', 0);
+       len = addmeta(NULL, tmp, '\0');
X       size = *ptrp + len + rest + 1;
X       buf = realloc2(buf, size);
-       addmeta(&(buf[*ptrp]), tmp, '\0', 0);
+       addmeta(&(buf[*ptrp]), tmp, '\0');
X       *ptrp += len;
X       free(tmp);
X 
@@ -3222,7 +3203,7 @@
X # else
X                       else if (cp[1] == '$' || cp[1] == '~') cp++;
X # endif
-#endif
+#endif /* FAKEMETA */
X                       else if ((i = evalvar(&buf, i, &cp, tmpq)) < 0) {
X                               if (bbuf) free(bbuf);
X                               free(buf);
@@ -3232,14 +3213,22 @@
X               }
X               else if (pc == PC_META) {
X                       cp++;
-                       if (flags & EA_KEEPMETA) buf[i++] = PMETA;
+                       if (flags & EA_KEEPMETA) pc = PC_NORMAL;
X                       else if (*cp == '$') /*EMPTY*/;
X                       else if ((flags & EA_BACKQ) && *cp == '`') /*EMPTY*/;
X                       else if ((flags & EA_STRIPQ)
X                       && (*cp == '\'' || *cp == '"'))
X                               /*EMPTY*/;
-                       else buf[i++] = PMETA;
-                       buf[i++] = *cp;
+                       else pc = PC_NORMAL;
+
+                       if (q == '`') {
+                               bbuf[j++] = PMETA;
+                               bbuf[j++] = *cp;
+                       }
+                       else {
+                               if (pc != PC_META) buf[i++] = PMETA;
+                               buf[i++] = *cp;
+                       }
X               }
X               else if (pc == PC_OPQUOTE) {
X                       if (*cp == '`') j = 0;
@@ -3365,17 +3354,18 @@
X       for (i = j = 0, quote = '\0'; arg[i]; i++) {
X               pc = parsechar(&(arg[i]), -1, '\0', 0, &quote, NULL);
X               if (pc == PC_OPQUOTE || pc == PC_CLQUOTE) {
-                       stripped = 1;
+                       stripped++;
X                       if (flags & EA_STRIPQ) continue;
X               }
X               else if (pc == PC_WORD) arg[j++] = arg[i++];
X               else if (pc == PC_META) {
-                       stripped = 1;
-                       if ((flags & EA_KEEPMETA)
-                       || quote == '\''
-                       || (quote == '"' && !strchr(DQ_METACHAR, arg[i + 1])))
-                               arg[j++] = arg[i];
X                       i++;
+                       if (flags & EA_KEEPMETA) pc = PC_NORMAL;
+                       else if (!quote && !(flags & EA_BACKQ)) /*EMPTY*/;
+                       else if (!strchr(DQ_METACHAR, arg[i])) pc = PC_NORMAL;
+
+                       if (pc != PC_META) arg[j++] = PMETA;
+                       else stripped++;
X               }
X 
X               arg[j++] = arg[i];
@@ -3434,8 +3424,7 @@
X               else if (pc == PC_META) {
X                       i++;
X                       if ((flags & EA_KEEPMETA)
-                       || quote == '\''
-                       || (quote == '"' && !strchr(DQ_METACHAR, cp[i])))
+                       || (quote && !strchr(DQ_METACHAR, cp[i])))
X                               tmp[j++] = PMETA;
X               }
X               else if (pc == PC_OPQUOTE) {
diff -urNP ../FD-2.07/system.c ./system.c
--- ../FD-2.07/system.c Thu May 26 00:00:00 2005
+++ ./system.c  Wed Jun 22 00:00:00 2005
@@ -4009,7 +4009,8 @@
X               closeonexec(rp -> new);
X #endif
X 
-       if ((rp -> old = newdup(Xdup(rp -> fd))) < 0) return(rp);
+       if (isvalidfd(rp -> fd) < 0) rp -> old = -1;
+       else if ((rp -> old = newdup(Xdup(rp -> fd))) < 0) return(rp);
X #if   !MSDOS
X       else if (rp -> old != STDIN_FILENO
X       && rp -> old != STDOUT_FILENO
@@ -4704,7 +4705,7 @@
X {
X       int id;
X 
-       if (!trp || !isstatement(trp -> comm)
+       if (!trp || (trp -> flags & ST_NODE) || !isstatement(trp -> comm)
X       || (id = (trp -> comm) -> id) <= 0 || id > STATEMENTSIZ)
X               return(-1);
X 
@@ -5688,9 +5689,6 @@
X 
X               if (pc == PC_OPQUOTE || pc == PC_CLQUOTE || pc == PC_SQUOTE)
X                       rp -> filename[j++] = s[i];
-#ifdef NESTINGQUOTE
-               else if (pc == PC_BQUOTE) rp -> filename[j++] = s[i];
-#endif
X               else if (pc == PC_WORD) {
X                       rp -> filename[j++] = s[i++];
X                       rp -> filename[j++] = s[i];
@@ -5743,10 +5741,9 @@
X       /* bash treats any meta character in ${} as just a character */
X               else if ((trp -> cont & CN_SBST) == CN_VAR)
X                       rp -> filename[j++] = s[i];
-#else
-               else if (pc == PC_BQUOTE) rp -> filename[j++] = s[i];
X #endif
-               else if (pc == PC_DQUOTE) rp -> filename[j++] = s[i];
+               else if (pc == PC_DQUOTE || pc == PC_BQUOTE)
+                       rp -> filename[j++] = s[i];
X #ifndef       MINIMUMSHELL
X # ifdef       BASHBUG
X       /* bash cannot include 'case' statement within $() */
@@ -5914,6 +5911,7 @@
X #if   defined (BASHSTYLE) || !defined (MINIMUMSHELL)
X       else if (trp -> cont & CN_SBST) {
X               red.filename[i++] = '\n';
+               red.filename[i] = '\0';
X               trp = addvar(trp, NULL, NULL, red.filename, &i, 0);
X       }
X #endif
@@ -8860,11 +8858,13 @@
X       ret = RET_SUCCESS;
X #endif
X       for (i = 1; i < (trp -> comm) -> argc; i++) {
-               if (typeone((trp -> comm) -> argv[i], stdout) >= 0) {
+               if (typeone((trp -> comm) -> argv[i], stdout) >= 0)
X #ifdef        BASHSTYLE
X                       ret = RET_SUCCESS;
+#else
+                       /*EMPTY*/;
+               else ret = RET_FAIL;
X #endif
-               }
X       }
X 
X       return(ret);
@@ -9287,6 +9287,13 @@
X       redirectlist *rp;
X       int i, id;
X 
+       if (!trp) {
+               printindent(lvl, stdout);
+               fputs("(null):", stdout);
+               fputnl(stdout);
+               return;
+       }
+
X       if (trp -> flags & ST_NODE) {
X               printindent(lvl, stdout);
X               fputs("node:\n", stdout);
@@ -9310,7 +9317,9 @@
X                       show_stree(statementbody(trp), lvl + 1);
X               }
X               else for (i = 0; i <= (trp -> comm) -> argc; i++) {
-                       if (!((trp -> comm) -> argv[i])) fputs("NULL", stdout);
+                       if (!((trp -> comm) -> argv)
+                       || !((trp -> comm) -> argv[i]))
+                               fputs("NULL", stdout);
X                       else if (!i && isbuiltin(trp -> comm))
X                               argfputs((trp -> comm) -> argv[i], stdout);
X                       else fprintf2(stdout, "\"%a\"",
diff -urNP ../FD-2.07/termemu.c ./termemu.c
--- ../FD-2.07/termemu.c        Thu May 26 00:00:00 2005
+++ ./termemu.c Wed Jun 22 00:00:00 2005
@@ -87,7 +87,7 @@
X 
X       if (Xsetscroll(min, max) >= 0) {
X               doscroll(n, c, x, y);
-               Xsetscroll(-1, -1);
+               Xsetscroll(0, n_line - 1);
X               Xlocate(x, y);
X               return;
X       }
@@ -761,7 +761,14 @@
X               emupid = (p_id_t)0;
X               safeclose(emufd);
X               emufd = -1;
-               dup2(STDIN_FILENO, ttyio);
+               if (fileno(ttyout) == ttyio) dup2(STDIN_FILENO, ttyio);
+               else {
+                       fd = fileno(ttyout);
+                       closetty(&fd, &ttyout);
+                       opentty(&fd, &ttyout);
+                       dup2(fd, ttyio);
+                       safeclose(fd);
+               }
X               maxfile = -1;
X 
X               setdefterment();
diff -urNP ../FD-2.07/termio.c ./termio.c
--- ../FD-2.07/termio.c Thu May 26 00:00:00 2005
+++ ./termio.c  Wed Jun 22 00:00:00 2005
@@ -346,7 +346,8 @@
X       if (*fdp >= 0) fd = *fdp;
X       else if ((fd = newdup(open(_PATH_TTY, flags, 0600))) < 0) return(-1);
X       if (*fpp) fp = *fpp;
-       else if (!(fp = fdopen(fd, "w+b"))) return(-1);
+       else if (!(fp = fdopen(fd, "w+b")) && !(fp = fopen(_PATH_TTY, "w+b")))
+               return(-1);
X 
X       *fdp = fd;
X       *fpp = fp;
diff -urNP ../FD-2.07/version.h ./version.h
--- ../FD-2.07/version.h        Thu May 26 00:00:00 2005
+++ ./version.h Wed Jun 22 00:00:00 2005
@@ -5,4 +5,4 @@
X  */
X 
X char *distributor = NULL;
-static char version[] = "@(#)fd.c  2.07 05/26/05";
+static char version[] = "@(#)fd.c  2.07a 06/22/05";
SHAR_EOF
  $shar_touch -am 06152212105 'FD-2.07a.patch' &&
  chmod 0644 'FD-2.07a.patch' ||
  $echo 'restore of' 'FD-2.07a.patch' 'failed'
  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
    || $echo 'FD-2.07a.patch:' 'MD5 check failed'
905968fcebd51a83043f23f8df7553f9  FD-2.07a.patch
SHAR_EOF
  else
    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'FD-2.07a.patch'`"
    test 14756 -eq "$shar_count" ||
    $echo 'FD-2.07a.patch:' 'original size' '14756,' 'current size' "$shar_count!"
  fi
fi
rm -fr _sh00360
exit 0
-- 
                                               しらい たかし