FDclone 2.09a patch [2/3]
しらいです。
file & directory 管理ツール FDclone 2.09a の patch その 2
です。
Submitted-by: shirai@chandra2
Archive-name: FD-2.09a.patch/part02
---- Cut Here and feed the following to sh ----
#!/bin/sh
# This is `FD-2.09a.shar.02' (part 2 of FD-2.09a.patch).
# Do not concatenate these parts, unpack them in order with `/bin/sh'.
# File `FD-2.09a.patch' is being continued...
#
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 test ! -r _sh00584/seq; then
$echo 'Please unpack part 1 first!'
exit 1
fi
shar_sequence=`cat _sh00584/seq`
if test "$shar_sequence" != 2; then
$echo 'Please unpack part' "$shar_sequence" 'next!'
exit 1
fi
if test ! -f _sh00584/new; then
$echo 'x -' 'STILL SKIPPING' 'FD-2.09a.patch'
else
$echo 'x -' 'continuing file' 'FD-2.09a.patch'
sed 's/^X//' << 'SHAR_EOF' >> FD-2.09a.patch &&
X Xclose(fd);
X lckflags &= ~LCK_FLOCK;
X }
X else if ((flags & O_TRUNC) && Xftruncate(fd, (off_t)0) < 0) {
X duperrno = errno;
- VOID_C fcntllock(fd, LCK_UNLOCK);
+ VOID_C fcntllock(path, fd, LCK_UNLOCK);
X Xclose(fd);
X errno = duperrno;
X return(NULL);
@@ -625,7 +671,7 @@
X if (!(lck -> flags & LCK_INVALID)) {
X #ifndef NOFLOCK
X if (lck -> flags & LCK_FLOCK)
- VOID_C fcntllock(lck -> fd, LCK_UNLOCK);
+ VOID_C fcntllock(NULL, lck -> fd, LCK_UNLOCK);
X #endif
X if (lck -> flags & LCK_STREAM) Xfclose(lck -> fp);
X else Xclose(lck -> fd);
@@ -738,6 +784,7 @@
X }
X }
X #endif /* !NOUID */
+ if (stp -> st_nlink & TCH_IGNOREERR) ret = 0;
X if (ret < 0) errno = duperrno;
X
X return(ret);
@@ -943,7 +990,7 @@
X errno = duperrno;
X return(-1);
X }
- stp1 -> st_nlink = (TCH_ATIME | TCH_MTIME);
+ stp1 -> st_nlink = (TCH_ATIME | TCH_MTIME | TCH_IGNOREERR);
X #ifdef _USEDOSCOPY
X if (touchfile(dest, stp1) < 0) return(-1);
X #else
@@ -1005,7 +1052,7 @@
X return(-1);
X
X stp1 -> st_nlink = (TCH_MODE | TCH_UID | TCH_GID
- | TCH_ATIME | TCH_MTIME);
+ | TCH_ATIME | TCH_MTIME | TCH_IGNOREERR);
X return (touchfile(dest, stp1));
X }
X
@@ -1086,8 +1133,7 @@
X #endif
X deftmpdir = strdup2(path);
X #if MSDOS
- n = getcurdrv();
- *path = (isupper2(n)) ? toupper2(*path) : tolower2(*path);
+ *path = (isupper2(getcurdrv())) ? toupper2(*path) : tolower2(*path);
X #endif
X
X mask = 0777 & ~tmpumask;
diff -urNP ../FD-2.09/frontend.c ./frontend.c
--- ../FD-2.09/frontend.c Tue Aug 22 00:00:00 2006
+++ ./frontend.c Tue Oct 31 00:00:00 2006
@@ -65,6 +65,7 @@
X static int NEAR recvstree __P_((int, syntaxtree **, syntaxtree *));
X #endif
X static VOID NEAR recvchild __P_((int));
+static VOID NEAR sendkey __P_((int));
X
X
X int waitstatus(pid, options, statusp)
@@ -425,7 +426,7 @@
X
X for (;;) {
X n = -1;
- c = getkey2(sigalrm(1));
+ c = getkey2(sigalrm(1), inputkcode);
X while (lockflags & (1 << win)) {
X kbhit2(1000000L / SENSEPERSEC);
X waitpty();
@@ -433,7 +434,9 @@
X #ifndef _NOORIGSHELL
X if (isshptymode()) break;
X #endif
- if (c < 0 || ptymenukey < 0 || c != ptymenukey) break;
+ if (c < 0 || ptymenukey < 0
+ || (c & ~K_ALTERNATE) != ptymenukey)
+ break;
X
X str[0] = asprintf3(PTYAI_K, getkeysym(ptymenukey, 0));
X str[1] = PTYIC_K;
@@ -988,6 +991,58 @@
X }
X }
X
+static VOID NEAR sendkey(c)
+int c;
+{
+ static char buf[MAXUTF8LEN * sizeof(short)];
+ static int index = 0;
+ static int max = 0;
+#ifndef _NOKANJICONV
+ int code;
+#endif
+ short w;
+
+#ifndef _NOKANJICONV
+ code = (inputkcode != NOCNV) ? inputkcode : DEFCODE;
+#endif
+ if (c >= 0) {
+ w = c;
+ memcpy(&(buf[index++ * sizeof(w)]), (char *)&w, sizeof(w));
+ }
+
+ if (c < 0 || c & 0xff00) /*EMPTY*/;
+ else if (max && index >= max) /*EMPTY*/;
+#ifdef _NOKANJICONV
+# ifdef CODEEUC
+ else if (c == C_EKANA) {
+ max = 2;
+ return;
+ }
+# endif
+#else /* !_NOKANJICONV */
+ else if (code == EUC && c == C_EKANA) {
+ max = 2;
+ return;
+ }
+ else if (code >= UTF8) {
+ if (index > 1) {
+ if ((c & 0xc0) == 0x80) return;
+ }
+ else if (ismsb(c)) {
+ max = ((c & 0xf0) == 0xe0) ? 3 : 2;
+ return;
+ }
+ }
+#endif /* !_NOKANJICONV */
+ else if (isinkanji1(c, code)) {
+ max = 2;
+ return;
+ }
+
+ if (index) sendbuf(emufd, buf, index * sizeof(w));
+ index = max = 0;
+}
+
X int frontend(VOID_A)
X {
X int n, ch, wastty, status;
@@ -1001,7 +1056,8 @@
X
X internal_status = FNC_FAIL;
X if (!(wastty = isttyiomode)) Xttyiomode(1);
- while ((ch = ptygetkey()) >= 0) sendword(emufd, ch);
+ while ((ch = ptygetkey()) >= 0) sendkey(ch);
+ sendkey(-1);
X if (!wastty) Xstdiomode();
X
X if (ch < -1) {
diff -urNP ../FD-2.09/func.h ./func.h
--- ../FD-2.09/func.h Tue Aug 22 00:00:00 2006
+++ ./func.h Tue Oct 31 00:00:00 2006
@@ -621,7 +621,9 @@
X extern VOID discardunitable __P_((VOID_A));
X extern u_int unifysjis __P_((u_int, int));
X extern u_int cnvunicode __P_((u_int, int));
-#endif
+extern VOID ucs2normalization __P_((u_short *, int *, int, u_int, int));
+extern u_int ucs2denormalization __P_((u_short *, int *, int));
+#endif /* _USEUNICODE */
X #ifndef _NOKANJICONV
X # ifdef _USEUNICODE
X extern int ucs2toutf8 __P_((char *, int, u_int));
@@ -641,7 +643,7 @@
X extern char *convput __P_((char *, char *, int, int, char *, int *));
X
X /* input.c */
-extern int intrkey __P_((VOID_A));
+extern int intrkey __P_((int));
X extern int Xgetkey __P_((int, int));
X extern int kanjiputs2 __P_((char *, int, int));
X extern VOID cputspace __P_((int));
@@ -748,6 +750,7 @@
X
X /* browse.c */
X extern VOID helpbar __P_((VOID_A));
+extern u_int getfmode __P_((int));
X extern int putmode __P_((char *, u_int, int));
X #ifdef HAVEFLAGS
X extern int putflags __P_((char *, u_long));
diff -urNP ../FD-2.09/ime.c ./ime.c
--- ../FD-2.09/ime.c Tue Aug 22 00:00:00 2006
+++ ./ime.c Tue Oct 31 00:00:00 2006
@@ -206,7 +206,7 @@
X u_int c;
X int type, kana;
X {
- char *cp, buf[3 + 1], tmp[2 + 1];
+ char *cp, buf[MAXUTF8LEN + 1], tmp[MAXKLEN + 1];
X int i, code;
X
X cp = NULL;
@@ -255,7 +255,7 @@
X }
X
X if (cp) VOID_C code2kanji(cp, c);
- cp = kanjiconv2(tmp, buf, 2, code, DEFCODE, L_INPUT);
+ cp = kanjiconv2(tmp, buf, MAXKLEN, code, DEFCODE, L_INPUT);
X if (kanjierrno) return((u_int)0);
X i = 0;
X if (!iskanji1(cp, 0) && (!kana || !iskana1(cp, &i))) return((u_int)0);
@@ -280,7 +280,7 @@
X char *buf;
X u_int c;
X {
- char tmp[2 + 1];
+ char tmp[MAXKLEN + 1];
X
X VOID_C code2kanji(tmp, c);
X return(inkanjiconv(buf, tmp));
@@ -335,7 +335,7 @@
X static int NEAR jisputs(c)
X u_int c;
X {
- char buf[4 + 1];
+ char buf[MAXKLEN * R_MAXKANA + 1];
X
X VOID_C jis2str(buf, c);
X return(imeputs(buf));
@@ -355,7 +355,7 @@
X static int NEAR countjisbuf(jp)
X jisbuf *jp;
X {
- char buf[4 + 1];
+ char buf[MAXKLEN * R_MAXKANA + 1];
X int n, len;
X
X if (!jp) return(0);
@@ -590,7 +590,7 @@
X int *typep;
X jisbuf *jp;
X {
- char buf[2 + 1];
+ char buf[MAXKLEN + 1];
X u_int n, c;
X u_short w;
X int i;
@@ -619,7 +619,7 @@
X u_int c;
X int type;
X {
- char *cp, buf[3 + 1], tmp[4 + 1];
+ char *cp, buf[MAXUTF8LEN + 1], tmp[MAXKLEN * R_MAXKANA + 1];
X
X cp = NULL;
X kanjierrno = 0;
@@ -631,7 +631,8 @@
X break;
X case 'S':
X VOID_C jis2str(tmp, c);
- cp = kanjiconv2(buf, tmp, 2, DEFCODE, SJIS, L_INPUT);
+ cp = kanjiconv2(buf, tmp,
+ MAXKLEN, DEFCODE, SJIS, L_INPUT);
X break;
X case 'K':
X VOID_C code2kanji(buf, c - 0x2020);
@@ -642,7 +643,8 @@
X #ifdef _USEUNICODE
X case 'U':
X VOID_C jis2str(tmp, c);
- cp = kanjiconv2(buf, tmp, 3, DEFCODE, UTF8, L_INPUT);
+ cp = kanjiconv2(buf, tmp,
+ MAXUTF8LEN, DEFCODE, UTF8, L_INPUT);
X c = ucs2fromutf8((u_char *)cp, NULL);
X cp = NULL;
X break;
@@ -679,7 +681,7 @@
X long *minp, *maxp, *prevp;
X int xpos[];
X {
- char buf[4 + 1];
+ char buf[MAXKLEN * R_MAXKANA + 1];
X long n, min, max, prev;
X int i, x, col, len;
X
@@ -743,7 +745,7 @@
X do {
X imeputcursor(xpos[argc - min], argc - min, 1);
X
- if ((ch = getkey3(sig)) < 0) break;
+ if ((ch = getkey3(sig, inputkcode)) < 0) break;
X old = argc;
X switch (ch) {
X case ' ':
@@ -889,7 +891,7 @@
X dispjiscode(c, type);
X imeputcursor(jis_xpos(plen, c % col), c % col, 1);
X
- if ((ch = getkey3(sig)) < 0) break;
+ if ((ch = getkey3(sig, inputkcode)) < 0) break;
X old = c;
X switch (ch) {
X case ' ':
@@ -1143,7 +1145,7 @@
X #endif
X (*ime_locate)(imewin_x, imewin_y);
X Xtflush();
- if ((c = getkey3(sig)) < 0) break;
+ if ((c = getkey3(sig, inputkcode)) < 0) break;
X else if (c == imekey) {
X ime_cont = kjisbuf.max = 0;
X c = K_ESC;
@@ -1325,7 +1327,7 @@
X char *buf;
X u_int c;
X {
- char tmp[4 + 1];
+ char tmp[MAXKLEN * R_MAXKANA + 1];
X
X VOID_C jis2str(tmp, c);
X return(inkanjiconv(buf, tmp));
diff -urNP ../FD-2.09/info.c ./info.c
--- ../FD-2.09/info.c Tue Aug 22 00:00:00 2006
+++ ./info.c Tue Oct 31 00:00:00 2006
@@ -103,9 +103,14 @@
X #endif /* USEGETFSENT */
X
X #if MSDOS
+# ifdef DOUBLESLASH
+# define MNTDIRSIZ MAXPATHLEN
+# else
+# define MNTDIRSIZ (3 + 1)
+# endif
X typedef struct _mnt_t {
X char *mnt_fsname;
- char mnt_dir[4];
+ char mnt_dir[MNTDIRSIZ];
X char *mnt_type;
X char *mnt_opts;
X } mnt_t;
@@ -201,9 +206,7 @@
X extern VOID error __P_((char *));
X extern int _chdir2 __P_((char *));
X extern char *strcpy2 __P_((char *, char *));
-#ifndef NOFLOCK
X extern char *strncpy2 __P_((char *, char *, int));
-#endif
X extern char *getwd2 __P_((VOID_A));
X extern VOID warning __P_((int, char *));
X #ifdef _USEDOSPATH
@@ -322,6 +325,9 @@
X #ifndef MNTTYPE_FAT32
X #define MNTTYPE_FAT32 "fat32" /* Win98 */
X #endif
+#ifndef MNTTYPE_SHARED
+#define MNTTYPE_SHARED "shared" /* Win98 */
+#endif
X #define MNTTYPE_XNFS "nfs" /* NFS */
X
X static int NEAR code2str __P_((char *, int));
@@ -351,6 +357,7 @@
X {FSID_FAT, MNTTYPE_PC},
X {FSID_LFN, MNTTYPE_DOS7},
X {FSID_LFN, MNTTYPE_FAT32},
+ {FSID_LFN, MNTTYPE_SHARED},
X #if MSDOS
X # ifndef _NODOSDRIVE
X {FSID_FAT, MNTTYPE_FAT12},
@@ -760,22 +767,47 @@
X statfs_t *fsbuf;
X mnt_t *mntbuf;
X {
- statfs_t fs;
- mnt_t mnt;
X #if MSDOS
X # ifndef _NODOSDRIVE
X int i;
X # endif
+# ifdef DOUBLESLASH
+ char *cp;
+ int len;
+# endif
+ statfs_t fs;
+ mnt_t mnt;
+ char buf[MAXPATHLEN];
+ int drive;
X
X if (!fsbuf) fsbuf = &fs;
X if (!mntbuf) mntbuf = &mnt;
X
X mntbuf -> mnt_fsname = "MSDOS";
- VOID_C gendospath(mntbuf -> mnt_dir, dospath(path, NULL), _SC_);
+ drive = dospath(path, buf);
+# ifdef DOUBLESLASH
+ if (drive == '_') {
+ if (*buf) path = buf;
+ len = isdslash(path);
+ if ((cp = strdelim(&(path[len]), 0))) {
+ len = cp - path;
+ if (!(cp = strdelim(&(path[len + 1]), 0)))
+ cp += strlen(cp);
+ len = cp - path;
+ }
+ strncpy2(mntbuf -> mnt_dir, path, len);
+ }
+ else
+# endif
+ VOID_C gendospath(mntbuf -> mnt_dir, drive, _SC_);
+
X # ifdef _NOUSELFN
X mntbuf -> mnt_type = MNTTYPE_PC;
X # else /* !_NOUSELFN */
X switch (supportLFN(mntbuf -> mnt_dir)) {
+ case 3:
+ mntbuf -> mnt_type = MNTTYPE_SHARED;
+ break;
X case 2:
X mntbuf -> mnt_type = MNTTYPE_FAT32;
X break;
@@ -812,13 +844,15 @@
X
X if (statfs2(mntbuf -> mnt_dir, fsbuf) < 0) return(-1);
X #else /* !MSDOS */
+# ifndef _NODOSDRIVE
+ int drv;
+# endif
+ statfs_t fs;
+ mnt_t mnt;
X mnt_t *mntp;
X FILE *fp;
X char *dir, fsname[MAXPATHLEN];
X ALLOC_T len, match;
-# ifndef _NODOSDRIVE
- int drv;
-# endif
X
X if (!fsbuf) fsbuf = &fs;
X if (!mntbuf) mntbuf = &mnt;
@@ -1069,7 +1103,10 @@
X #ifndef _NODOSDRIVE
X needbavail--;
X #endif
- if (n < 0) return(-1);
+ if (n < 0) {
+ *bsizep = getblocksize(path);
+ return(-1);
+ }
X
X *totalp = fsbuf.f_blocks;
X *freep = fsbuf.f_bavail;
diff -urNP ../FD-2.09/input.c ./input.c
--- ../FD-2.09/input.c Tue Aug 22 00:00:00 2006
+++ ./input.c Tue Oct 31 00:00:00 2006
@@ -49,11 +49,16 @@
X #define LEFTMARGIN 0
X #define RIGHTMARGIN 2
X
+#ifdef _NOKANJICONV
+#define getinkcode() NOCNV
+#else
+static int NEAR getinkcode __P_((VOID_A));
+#endif
X #ifndef _NOEDITMODE
X static int NEAR getemulatekey __P_((int, CONST char []));
X #endif
X #ifdef _NOIME
-#define getkey4 getkey3
+#define getkey4(s) getkey3(s, getinkcode())
X #else
X static int NEAR getimebuf __P_((char *, int *));
X static int NEAR getime __P_((int, int *, int));
@@ -109,6 +114,10 @@
X static VOID NEAR selectfile __P_((int, char **));
X static int NEAR completestr __P_((int, int, int));
X #endif
+#ifndef _NOKANJICONV
+static u_int NEAR getucs2 __P_((int));
+static VOID NEAR ungetch3 __P_((int));
+#endif
X static int NEAR getch3 __P_((VOID_A));
X static int NEAR getkanjikey __P_((char *, int));
X static VOID NEAR copyhist __P_((char *, int));
@@ -211,18 +220,55 @@
X #ifndef _NOIME
X static int imemode = 0;
X #endif
+#ifndef _NOKANJICONV
+static u_char ungetbuf3[MAXUTF8LEN * MAXNFLEN];
+static int ungetnum3 = 0;
+#endif
X
X
-int intrkey(VOID_A)
+#ifndef _NOKANJICONV
+static int NEAR getinkcode(VOID_A)
X {
- int c;
+ int code;
X
- if (kbhit2(0L) && ((c = getkey2(0)) == cc_intr || c == K_ESC)) {
- warning(0, INTR_K);
- return(1);
+ code = (inputkcode != NOCNV) ? inputkcode : DEFCODE;
+# ifndef _NOPTY
+ if (parentfd >= 0 && ptyinkcode != NOCNV) code = ptyinkcode;
+# endif
+
+ return(code);
+}
+#endif /* !_NOKANJICONV */
+
+int intrkey(key)
+int key;
+{
+ int c, duperrno;
+
+ duperrno = errno;
+ if (ttyio < 0 || !kbhit2(0L)) c = EOF;
+ else if ((c = getch2()) == EOF) /*EMPTY*/;
+ else if (c != K_ESC) /*EMPTY*/;
+ else if (kbhit2(WAITKEYPAD * 1000L)) {
+ ungetch2(c);
+ c = EOF;
X }
X
- return(0);
+ if (c == EOF) /*EMPTY*/;
+ else if (c == cc_intr || (key >= 0 && c == key)) {
+ if (isttyiomode) warning(0, INTR_K);
+ else {
+ fprintf2(stderr, INTR_K);
+ fputnl(stderr);
+ }
+ }
+ else {
+ ungetch2(c);
+ c = EOF;
+ }
+ errno = duperrno;
+
+ return((c == EOF) ? 0 : 1);
X }
X
X #ifndef _NOEDITMODE
@@ -246,14 +292,10 @@
X char *buf;
X int *ptrp;
X {
- int c, code;
-
- code = (inputkcode != NOCNV) ? inputkcode : DEFCODE;
-# ifndef _NOPTY
- if (parentfd >= 0 && ptyinkcode != NOCNV) code = ptyinkcode;
-# endif
+ int c;
X
- if (code != EUC || !isekana(buf, *ptrp)) c = (u_char)(buf[*ptrp]);
+ if (getinkcode() != EUC || !isekana(buf, *ptrp))
+ c = (u_char)(buf[*ptrp]);
X else c = mkekana((u_char)(buf[++(*ptrp)]));
X (*ptrp)++;
X
@@ -326,7 +368,7 @@
X int c;
X
X if (imemode && getime(sig, &c, 0) >= 0) return(c);
- return(getkey3(sig));
+ return(getkey3(sig, getinkcode()));
X }
X #endif /* !_NOIME */
X
@@ -348,6 +390,9 @@
X return('\0');
X }
X
+#ifndef _NOKANJICONV
+ if (ungetnum3 > 0) return((int)ungetbuf3[--ungetnum3]);
+#endif
X sig = sigalrm(sig);
X ch = getkey4(sig);
X if (eof && (ch != cc_eof || prev == ch)) eof = 0;
@@ -1707,7 +1752,8 @@
X Xcputs2("wish to see them all? (y or n)");
X Xtflush();
X for (;;) {
- if ((i = getkey2(0)) < K_MIN) {
+ i = getkey3(0, getinkcode());
+ if (i < K_MIN) {
X i = toupper2(i);
X if (i == 'Y' || i == 'N')
X break;
@@ -1857,7 +1903,7 @@
X }
X if (comline && top > 0) {
X for (i = top - 1; i >= 0; i--)
- if (inputbuf[i] != ' ' && inputbuf[i] != '\t') break;
+ if (!isblank2(inputbuf[i])) break;
X if (i >= 0 && !strchr(SHELL_OPERAND, inputbuf[i])) comline = 0;
X }
X # ifndef _NOORIGSHELL
@@ -2082,11 +2128,53 @@
X }
X #endif /* !_NOCOMPLETE */
X
+#ifndef _NOKANJICONV
+static u_int NEAR getucs2(ch)
+int ch;
+{
+ char buf[MAXUTF8LEN + 1];
+ int n;
+
+ n = 0;
+ if (ch & 0xff00) return((u_int)-1);
+ buf[n++] = ch;
+ if (!ismsb(ch)) /*EMPTY*/;
+ else if ((ch = getch3()) == EOF) return((u_int)-1);
+ else {
+ buf[n++] = ch;
+ if (isutf2(buf[0], buf[1])) /*EMPTY*/;
+ else if ((ch = getch3()) == EOF) {
+ ungetch3(buf[1]);
+ return((u_int)-1);
+ }
+ else buf[n++] = ch;
+ }
+ buf[n] = '\0';
+
+ return(ucs2fromutf8((u_char *)buf, NULL));
+}
+
+static VOID NEAR ungetch3(c)
+int c;
+{
+ if (ungetnum3 >= arraysize(ungetbuf3)) return;
+ memmove((char *)&(ungetbuf3[1]), (char *)&(ungetbuf3[0]),
+ ungetnum3 * sizeof(u_char));
+ ungetbuf3[0] = c;
+ ungetnum3++;
+}
+#endif /* !_NOKANJICONV */
+
X static int NEAR getch3(VOID_A)
X {
X #ifndef _NOIME
X int c;
+#endif
X
+#ifndef _NOKANJICONV
+ if (ungetnum3 > 0) return((int)ungetbuf3[--ungetnum3]);
+#endif
+#ifndef _NOIME
X if (imemode) return((getime(0, &c, 1) >= 0) ? c : EOF);
X #endif
X if (!kbhit2(WAITMETA * 1000L)) return(EOF);
@@ -2098,8 +2186,10 @@
X int ch;
X {
X #ifndef _NOKANJICONV
- char tmpkanji[3 + 1];
- int n, code;
+ u_short ubuf[MAXNFLEN];
+ char tmp[MAXUTF8LEN + 1];
+ u_int u;
+ int i, n, len, code;
X #endif
X int ch2;
X
@@ -2119,54 +2209,48 @@
X }
X # endif
X #else /* !_NOKANJICONV */
- code = (inputkcode != NOCNV) ? inputkcode : DEFCODE;
-# ifndef _NOPTY
- if (parentfd >= 0 && ptyinkcode != NOCNV) code = ptyinkcode;
-# endif
-
+ code = getinkcode();
X if (code == EUC && isekana2(ch)) {
- tmpkanji[0] = (char)C_EKANA;
- tmpkanji[1] = (ch & 0xff);
- tmpkanji[2] = '\0';
- kanjiconv(buf, tmpkanji, 2, code, DEFCODE, L_INPUT);
+ tmp[0] = (char)C_EKANA;
+ tmp[1] = (ch & 0xff);
+ tmp[2] = '\0';
+ kanjiconv(buf, tmp, MAXKLEN, code, DEFCODE, L_INPUT);
X return(1);
X }
X if (code == SJIS && iskana2(ch)) {
- tmpkanji[0] = ch;
- tmpkanji[1] = '\0';
- kanjiconv(buf, tmpkanji, 2, code, DEFCODE, L_INPUT);
+ tmp[0] = ch;
+ tmp[1] = '\0';
+ kanjiconv(buf, tmp, MAXKLEN, code, DEFCODE, L_INPUT);
X return(1);
X }
X if (code >= UTF8) {
- if ((ch & 0xff00) || !ismsb(ch)) /*EMPTY*/;
- else if ((ch2 = getch3()) == EOF) {
- buf[0] = '\0';
- return(-1);
- }
- else if (isutf2(ch, ch2)) {
- tmpkanji[0] = ch;
- tmpkanji[1] = ch2;
- tmpkanji[2] = '\0';
- n = kanjiconv(buf, tmpkanji, 2,
- code, DEFCODE, L_INPUT);
- return(n);
+ i = 0;
+ for (;;) {
+ if ((u = getucs2(ch)) == (u_int)-1) {
+ if (i) ungetch3(ch);
+ buf[0] = '\0';
+ return(-1);
+ }
+ ubuf[i++] = u;
+ if (i >= MAXNFLEN) break;
+ if (code != M_UTF8 || (ch = getch3()) == EOF) break;
+ }
+ len = i;
+ i = 0;
+ if (!len) u = ch;
+ else if (code != M_UTF8) u = ubuf[i++];
+ else u = ucs2denormalization(ubuf, &i, code - UTF8);
+
+ while (i < len) {
+ tmp[ucs2toutf8(tmp, 0, ubuf[i++])] = '\0';
+ for (n = 0; tmp[n]; n++) ungetch3(tmp[n]);
X }
- else if ((n = getch3()) == EOF) {
- buf[0] = '\0';
- return(-1);
- }
- else {
- tmpkanji[0] = ch;
- tmpkanji[1] = ch2;
- tmpkanji[2] = n;
- tmpkanji[3] = '\0';
- n = kanjiconv(buf, tmpkanji, 2,
- code, DEFCODE, L_INPUT);
+ tmp[ucs2toutf8(tmp, 0, u)] = '\0';
+ n = kanjiconv(buf, tmp, MAXKLEN, code, DEFCODE, L_INPUT);
X # ifdef CODEEUC
- if (isekana(buf, 0)) n = 1;
+ if (isekana(buf, 0)) n = 1;
X # endif
- return(n);
- }
+ return(n);
X }
X #endif /* !_NOKANJICONV */
X
@@ -2180,10 +2264,10 @@
X buf[1] = ch2;
X buf[2] = '\0';
X #else
- tmpkanji[0] = ch;
- tmpkanji[1] = ch2;
- tmpkanji[2] = '\0';
- kanjiconv(buf, tmpkanji, 2, code, DEFCODE, L_INPUT);
+ tmp[0] = ch;
+ tmp[1] = ch2;
+ tmp[2] = '\0';
+ kanjiconv(buf, tmp, MAXKLEN, code, DEFCODE, L_INPUT);
X #endif
X return(2);
X }
@@ -2589,7 +2673,7 @@
X #if FD >= 2
X ALLOC_T searchsize;
X #endif
- char *tmphist, buf[2 + 1];
+ char *tmphist, buf[MAXKLEN + 1];
X int i, n, ch, ch2, ovptr, hist, quote, sig;
X
X subwindow = 1;
@@ -2630,7 +2714,7 @@
X ch2 = ch;
X ovptr = vptr;
X if (quote) {
- i = ch = getkey2(sigalrm(sig));
+ i = ch = getkey2(sigalrm(sig), getinkcode());
X quote = 0;
X #if MSDOS
X switch (i) {
@@ -2943,10 +3027,9 @@
X keyflush();
X #ifndef _NOCOMPLETE
X if (!completable(h) || !selectlist) break;
- i = completestr(0, -1, h);
- if (i < 0) break;
- if (iseol(vptr)) ovptr = -1;
X ch = '\0';
+ i = completestr(0, -1, h);
+ if (i >= 0 && iseol(vptr)) ovptr = -1;
X #endif /* !_NOCOMPLETE */
X break;
X case K_ESC:
@@ -3490,7 +3573,7 @@
X if (!(wastty = isttyiomode)) Xttyiomode(1);
X keyflush();
X do {
- getkey2(sigalrm(1));
+ getkey3(sigalrm(1), getinkcode());
X } while (kbhit2(WAITAFTERWARN * 1000L));
X if (!wastty) Xstdiomode();
X
diff -urNP ../FD-2.09/kanji.c ./kanji.c
--- ../FD-2.09/kanji.c Tue Aug 22 00:00:00 2006
+++ ./kanji.c Tue Oct 31 00:00:00 2006
@@ -147,8 +147,6 @@
X static int NEAR tojis8 __P_((char *, u_char *, int, int, int, int));
X static int NEAR tojunet __P_((char *, u_char *, int, int, int, int));
X # ifdef _USEUNICODE
-static VOID NEAR ucs2normalization __P_((u_short *, int *, int, u_int, int));
-static u_int NEAR ucs2denormalization __P_((u_short *, int *, int));
X static u_int NEAR toucs2 __P_((u_char *, int *));
X static VOID NEAR fromucs2 __P_((char *, int *, u_int));
X static int NEAR toutf8 __P_((char *, u_char *, int));
@@ -943,6 +941,8 @@
X kanjierrno = UTF8;
X return(r);
X }
+ if (wc == 0x3099) return(0x814a);
+ if (wc == 0x309a) return(0x814b);
X }
X
X if (unicodebuffer && !unitblbuf) readunitable(0);
@@ -1138,6 +1138,9 @@
X u_char *s;
X int max, io;
X {
+# ifndef CODEEUC
+ u_char tmp[MAXKLEN];
+# endif
X int i, j, mode;
X
X mode = ASCII;
@@ -1212,8 +1215,6 @@
X buf[j++] = s[i++] | 0x80;
X buf[j++] = jdecnv(s[i], io) | 0x80;
X # else
- u_char tmp[2];
-
X tmp[0] = s[i++];
X tmp[1] = jdecnv(s[i], io);
X j2sj(&(buf[j]), tmp);
@@ -1350,7 +1351,7 @@
X }
X
X # ifdef _USEUNICODE
-static VOID NEAR ucs2normalization(buf, ptrp, max, wc, nf)
+VOID ucs2normalization(buf, ptrp, max, wc, nf)
X u_short *buf;
X int *ptrp, max;
X u_int wc;
@@ -1399,7 +1400,7 @@
X if (new) free(new);
X }
X
-static u_int NEAR ucs2denormalization(buf, ptrp, nf)
+u_int ucs2denormalization(buf, ptrp, nf)
X u_short *buf;
X int *ptrp, nf;
X {
@@ -1474,12 +1475,13 @@
X u_char *s;
X int *ptrp;
X {
+# ifdef CODEEUC
+ u_char tmp[MAXKLEN];
+# endif
X u_int w;
X
X if (iskanji1((char *)s, *ptrp)) {
X # ifdef CODEEUC
- u_char tmp[2];
-
X j2sj((char *)tmp, &(s[*ptrp]));
X if (kanjierrno) kanjierrno = EUC;
X *ptrp += 2;
@@ -1502,6 +1504,9 @@
X int *ptrp;
X u_int wc;
X {
+# ifdef CODEEUC
+ u_char tmp[MAXKLEN];
+# endif
X int c1, c2;
X
X wc = cnvunicode(wc, 0);
@@ -1515,8 +1520,6 @@
X }
X else if (issjis1(c1) && issjis2(c2)) {
X # ifdef CODEEUC
- u_char tmp[2];
-
X tmp[0] = c1;
X tmp[1] = c2;
X sj2j(&(buf[*ptrp]), tmp);
@@ -1622,10 +1625,10 @@
X u2 = (u_short *)malloc2((max + 1) * sizeof(u_short));
X
X for (i = j = 0; s[i] && j < max; j++) u1[j] = toucs2(s, &i);
- u1[j] = 0;
+ u1[j] = (u_short)0;
X for (i = j = 0; u1[i] && j < max; i++)
X ucs2normalization(u2, &j, max, u1[i], nf);
- u2[j] = 0;
+ u2[j] = (u_short)0;
X for (i = j = 0; u2[i] && j < max; i++) {
X len = 1;
X if (u2[i] >= 0x80) len++;
@@ -1654,10 +1657,10 @@
X u2 = (u_short *)malloc2((max + 1) * sizeof(u_short));
X
X for (i = j = 0; s[i] && j < max; j++) u1[j] = ucs2fromutf8(s, &i);
- u1[j] = 0;
+ u1[j] = (u_short)0;
X for (i = j = 0; u1[i] && j < max; j++)
X u2[j] = ucs2denormalization(u1, &i, nf);
- u2[j] = 0;
+ u2[j] = (u_short)0;
X for (i = j = 0; u2[i] && j + 1 < max; i++) fromucs2(buf, &j, u2[i]);
X
X free(u1);
@@ -1688,7 +1691,7 @@
X int max;
X {
X # ifdef CODEEUC
- u_char tmp[2];
+ u_char tmp[MAXKLEN];
X # endif
X int i, j;
X
@@ -1720,6 +1723,9 @@
X u_char *s;
X int max;
X {
+# ifdef CODEEUC
+ u_char tmp[MAXKLEN];
+# endif
X int i, j, c1, c2;
X
X for (i = j = 0; s[i] && j < max; i++, j++) {
@@ -1748,8 +1754,6 @@
X }
X else {
X # ifdef CODEEUC
- u_char tmp[2];
-
X tmp[0] = c1;
X tmp[1] = c2;
X sj2j(&(buf[j]), tmp);
@@ -1791,7 +1795,7 @@
X int max;
X {
X # ifdef CODEEUC
- u_char tmp[2];
+ u_char tmp[MAXKLEN];
X # endif
X int i, j, len;
X
@@ -1827,6 +1831,9 @@
X u_char *s;
X int max;
X {
+# ifdef CODEEUC
+ u_char tmp[MAXKLEN];
+# endif
X int i, j, c1, c2;
X
X for (i = j = 0; s[i] && j < max; i++, j++) {
@@ -1855,8 +1862,6 @@
X }
X else {
X # ifdef CODEEUC
- u_char tmp[2];
-
X tmp[0] = c1;
X tmp[1] = c2;
X sj2j(&(buf[j]), tmp);
@@ -2055,6 +2060,11 @@
X # endif
X char *cp;
X
+#ifdef DOUBLESLASH
+ if (path[0] == _SC_ && path[1] == _SC_ && !isdslash(path))
+ memmove(path, &(path[1]), strlen(&(path[1])) + 1);
+#endif
+
X if (noconv) return(path);
X # ifndef _NOKANJIFCONV
X fgetok = (nokanjifconv) ? 0 : 1;
@@ -2126,13 +2136,20 @@
X if (norealpath) cp = path;
X else {
X if ((file = strrdelim(path, 0))) {
- n = file - path;
- if (file++ == isrootdir(path)) n++;
+# ifdef DOUBLESLASH
+ if ((n = isdslash(path)) && file < &(path[n]))
+ file = &(path[n]);
+ else
+# endif
+ {
+ n = file - path;
+ if (file++ == isrootdir(path)) n++;
+ }
X strncpy2(rpath, path, n);
X }
X # ifdef _USEDOSEMU
X else if ((n = _dospath(path))) {
- file = path + 2;
+ file = &(path[2]);
X VOID_C gendospath(rpath, n, '.');
X }
X # endif
@@ -2145,6 +2162,7 @@
X strncpy2(cp, file, MAXPATHLEN - 1 - (cp - rpath));
X cp = rpath;
X }
+
X # ifdef _USEDOSEMU
X if ((n = dospath(cp, kbuf))) {
X cp = kbuf;
@@ -2181,11 +2199,13 @@
X if (cp == path) return(path);
X if (needfile && (file = strrdelim(cp, 0))) file++;
X else file = cp;
+
X # ifdef _USEDOSEMU
- if (n && !_dospath(file)) strcpy(gendospath(buf, n, '\0'), file);
+ if (isalpha2(n) && !_dospath(file)) cp = gendospath(buf, n, '\0');
X else
X # endif
- strcpy(buf, file);
+ cp = buf;
+ strcpy(cp, file);
X
X return(buf);
X }
diff -urNP ../FD-2.09/kctype.h ./kctype.h
--- ../FD-2.09/kctype.h Tue Aug 22 00:00:00 2006
+++ ./kctype.h Tue Oct 31 00:00:00 2006
@@ -243,6 +243,7 @@
X (((u_char)(c1) & 0xf0) == 0xe0 \
X && ((u_char)(c2) & 0xc0) == 0x80 \
X && ((u_char)(c3) & 0xc0) == 0x80)
+#define iswucs2(u) (((u) & 0xff00) && ((u) < 0xff61 || (u) > 0xff9f))
X
X #define NOCNV 0
X #define ENG 1
@@ -271,6 +272,9 @@
X #endif
X
X #define MAXKANJIBUF (3 + 2 + 3)
+#define MAXKLEN 2
+#define MAXUTF8LEN 3
+#define MAXNFLEN 4
X
X #ifdef NOMULTIKANJI
X #define _NOKANJICONV
@@ -287,7 +291,9 @@
X #ifndef _NOKANJIFCONV
X K_EXTERN int defaultkcode K_INIT(NOCNV);
X #endif
-#ifndef _NOKANJICONV
+#ifdef _NOKANJICONV
+#define inputkcode NOCNV
+#else
X K_EXTERN int inputkcode K_INIT(NOCNV);
X #endif
X #if !defined (_NOKANJICONV) \
diff -urNP ../FD-2.09/libc.c ./libc.c
--- ../FD-2.09/libc.c Tue Aug 22 00:00:00 2006
+++ ./libc.c Tue Oct 31 00:00:00 2006
@@ -160,16 +160,23 @@
X if (n == 1) {
X cp = strrdelim(resolved, 0);
X top = resolved;
-#if MSDOS
- top += 2;
-#else /* !MSDOS */
-# ifndef _NODOSDRIVE
+#ifndef _USEDOSEMU
X if (_dospath(resolved)) top += 2;
X else
-# endif
+#endif
+#ifdef DOUBLESLASH
+ if ((n = isdslash(resolved)) && cp < &(resolved[n])) {
+ top = &(resolved[n - 1]);
+ if (*top != _SC_) return(resolved);
+ }
+ else
+#endif
+#if MSDOS
+ top += 2;
+#else
X if (rdlink && evallink(resolved, cp) > 0)
X return(_realpath2(path, resolved, rdlink));
-#endif /* !MSDOS */
+#endif
X if (!cp || cp == top) {
X *top = _SC_;
X cp = top + 1;
@@ -195,13 +202,16 @@
X char *path, *resolved;
X int rdlink;
X {
-#if !MSDOS && !defined (_NODOSDRIVE)
+#ifdef _USEDOSEMU
X char *cp;
X int duplastdrive;
X #endif
-#if MSDOS || !defined (_NODOSDRIVE)
+#ifdef _USEDOSPATH
X int drv;
X #endif
+#ifdef DOUBLESLASH
+ int n;
+#endif
X #if MSDOS
X int drive;
X #endif
@@ -210,25 +220,8 @@
X strcpy(tmp, path);
X path = tmp;
X
-#if MSDOS
- drv = dospath(nullstr, NULL);
- if ((drive = _dospath(path))) path += 2;
- if (*path == _SC_) {
- if (!drive) drive = drv;
- VOID_C gendospath(resolved, drive, _SC_);
- }
- else if (drive && drive != drv) {
- if (setcurdrv(drive, 0) < 0)
- VOID_C gendospath(resolved, drive, _SC_);
- else {
- if (!Xgetwd(resolved)) lostcwd(resolved);
- if (setcurdrv(drv, 0) < 0) error("setcurdrv()");
- }
- }
-#else /* !MSDOS */
- if (*path == _SC_) copyrootpath(resolved);
-# ifndef _NODOSDRIVE
- else if ((drv = _dospath(path))) {
+#ifdef _USEDOSEMU
+ if ((drv = _dospath(path))) {
X path += 2;
X if (*path == _SC_) cp = NULL;
X else {
@@ -239,11 +232,40 @@
X }
X if (!cp) VOID_C gendospath(resolved, drv, _SC_);
X }
-# endif
+ else
+#endif
+#ifdef DOUBLESLASH
+ if ((n = isdslash(path))) {
+ strncpy2(resolved, path, n);
+ path += n;
+ if (*path == _SC_) path++;
+ }
+ else
+#endif
+ {
+#if MSDOS
+ drv = dospath(nullstr, NULL);
+ if ((drive = _dospath(path))) path += 2;
+ if (*path == _SC_) {
+ if (!drive) drive = drv;
+ VOID_C gendospath(resolved, drive, _SC_);
+ }
+ else if (drive && drive != drv) {
+ if (setcurdrv(drive, 0) < 0)
+ VOID_C gendospath(resolved, drive, _SC_);
+ else {
+ if (!Xgetwd(resolved)) lostcwd(resolved);
+ if (setcurdrv(drv, 0) < 0) error("setcurdrv()");
+ }
+ }
+#else /* !MSDOS */
+ if (*path == _SC_) copyrootpath(resolved);
X #endif /* !MSDOS */
- else if (!rdlink && resolved != fullpath && *fullpath)
- strcpy(resolved, fullpath);
- else if (!Xgetwd(resolved)) copyrootpath(resolved);
+ else if (!rdlink && resolved != fullpath && *fullpath)
+ strcpy(resolved, fullpath);
+ else if (!Xgetwd(resolved)) copyrootpath(resolved);
+ }
+
X norealpath++;
X _realpath2(path, resolved, rdlink);
X norealpath--;
@@ -881,7 +903,7 @@
X fflush(stderr);
X Xttyiomode(1);
X keyflush();
- getkey2(0);
+ getkey3(0, inputkcode);
X Xstdiomode();
X fputnl(stderr);
X }
@@ -929,7 +951,7 @@
X fflush(stderr);
X Xttyiomode(1);
X keyflush();
- getkey2(0);
+ getkey3(0, inputkcode);
X Xstdiomode();
X fputnl(stderr);
X if (wasttyflags & F_TTYIOMODE)
diff -urNP ../FD-2.09/machine.h ./machine.h
--- ../FD-2.09/machine.h Tue Aug 22 00:00:00 2006
+++ ./machine.h Tue Oct 31 00:00:00 2006
@@ -23,6 +23,7 @@
X #define BSPATHDELIM
X #define USECRNL
X #define CWDINPATH
+#define DOUBLESLASH
X #define NOTZFILEH
X #define USETIMEH
X #define USEUTIME
@@ -473,6 +474,7 @@
X #define PATHNOCASE
X #define COMMNOCASE
X #define USECRNL
+#define DOUBLESLASH
X #define USEMANLANG
X #define BSDINSTALL
X #define TARUSESPACE
@@ -789,6 +791,7 @@
X /* #define BSPATHDELIM ;path delimtor is backspace */
X /* #define USECRNL ;use CR-NL as end of line */
X /* #define CWDINPATH ;CWD is implicitly included in command path */
+/* #define DOUBLESLASH ;pathname starting with // has some special mean */
X /* #define USEMANLANG ;man(1) directory includes LANG environment value */
X /* #define SUPPORTSJIS ;cc(1) or man(1) supports Shift JIS perfectly */
X /* #define BSDINSTALL ;install(1) with option -c is valid like BSD */
diff -urNP ../FD-2.09/main.c ./main.c
--- ../FD-2.09/main.c Tue Aug 22 00:00:00 2006
+++ ./main.c Tue Oct 31 00:00:00 2006
@@ -158,6 +158,7 @@
X #ifdef SIGALRM
X static int trapalrm __P_((VOID_A));
X #endif
+static int wrap_intrkey __P_((VOID_A));
X static char *NEAR getversion __P_((int *));
X #ifndef _NOLOGGING
X static VOID NEAR startlog __P_((char **));
@@ -251,6 +252,7 @@
X fputs(s, stderr);
X fputnl(stderr);
X }
+ fclose(stderr);
X
X if (isorgpid()) {
X inittty(1);
@@ -604,7 +606,7 @@
X Xputterm(T_BELL);
X Xcputnl();
X Xtflush();
- if (kbhit2(1000000L) && getkey2(0) == K_ESC) {
+ if (kbhit2(1000000L) && getkey3(0, inputkcode) == K_ESC) {
X errno = 0;
X error(INTR_K);
X }
@@ -736,6 +738,11 @@
X }
X #endif /* SIGALRM */
X
+static int wrap_intrkey(VOID_A)
+{
+ return(intrkey(-1));
+}
+
X int sigvecset(set)
X int set;
X {
@@ -757,7 +764,7 @@
X #endif
X #ifndef _NODOSDRIVE
X doswaitfunc = waitmes;
- dosintrfunc = intrkey;
+ dosintrfunc = wrap_intrkey;
X #endif
X status = 1;
X }
@@ -983,7 +990,7 @@
X }
X
X cp = line + strlen(line);
- for (cp--; cp >= line && (*cp == ' ' || *cp == '\t'); cp--);
+ for (cp--; cp >= line && isblank2(*cp); cp--);
X cp[1] = '\0';
X
X cont = 0;
@@ -1379,7 +1386,6 @@
X environ[i] = NULL;
X #endif
X
- initenv();
X setexecpath(argv[0], envp);
X #ifdef _USEUNICODE
X unitblpath = strdup2(DATADIR);
@@ -1414,6 +1420,7 @@
X error(NTERM_K);
X }
X #endif /* !_NOORIGSHELL */
+ initenv();
X
X Xttyiomode(0);
X initterm();
diff -urNP ../FD-2.09/makefile.b98 ./makefile.b98
--- ../FD-2.09/makefile.b98 Tue Aug 22 00:00:00 2006
+++ ./makefile.b98 Tue Oct 31 00:00:00 2006
@@ -4,7 +4,7 @@
X
X TITLE = FD-
X VERMAJ = 2
-VERSION = 2.09
+VERSION = 2.09a
X PREFIX =
X CONFDIR =
X BUILD =
diff -urNP ../FD-2.09/makefile.bpc ./makefile.bpc
--- ../FD-2.09/makefile.bpc Tue Aug 22 00:00:00 2006
+++ ./makefile.bpc Tue Oct 31 00:00:00 2006
@@ -4,7 +4,7 @@
X
X TITLE = FD-
X VERMAJ = 2
-VERSION = 2.09
+VERSION = 2.09a
X PREFIX =
X CONFDIR =
X BUILD =
diff -urNP ../FD-2.09/makefile.d98 ./makefile.d98
--- ../FD-2.09/makefile.d98 Tue Aug 22 00:00:00 2006
+++ ./makefile.d98 Tue Oct 31 00:00:00 2006
@@ -4,7 +4,7 @@
X
X TITLE = FD-
X VERMAJ = 2
-VERSION = 2.09
+VERSION = 2.09a
X PREFIX =
X CONFDIR =
X BUILD =
diff -urNP ../FD-2.09/makefile.dpc ./makefile.dpc
--- ../FD-2.09/makefile.dpc Tue Aug 22 00:00:00 2006
+++ ./makefile.dpc Tue Oct 31 00:00:00 2006
@@ -4,7 +4,7 @@
X
X TITLE = FD-
X VERMAJ = 2
-VERSION = 2.09
+VERSION = 2.09a
X PREFIX =
X CONFDIR =
X BUILD =
diff -urNP ../FD-2.09/makefile.g98 ./makefile.g98
--- ../FD-2.09/makefile.g98 Tue Aug 22 00:00:00 2006
+++ ./makefile.g98 Tue Oct 31 00:00:00 2006
@@ -4,7 +4,7 @@
X
X TITLE = FD-
X VERMAJ = 2
-VERSION = 2.09
+VERSION = 2.09a
X PREFIX =
X CONFDIR =
X BUILD =
diff -urNP ../FD-2.09/makefile.gpc ./makefile.gpc
--- ../FD-2.09/makefile.gpc Tue Aug 22 00:00:00 2006
+++ ./makefile.gpc Tue Oct 31 00:00:00 2006
@@ -4,7 +4,7 @@
X
X TITLE = FD-
X VERMAJ = 2
-VERSION = 2.09
+VERSION = 2.09a
X PREFIX =
X CONFDIR =
X BUILD =
diff -urNP ../FD-2.09/makefile.l98 ./makefile.l98
--- ../FD-2.09/makefile.l98 Tue Aug 22 00:00:00 2006
+++ ./makefile.l98 Tue Oct 31 00:00:00 2006
@@ -4,7 +4,7 @@
X
X TITLE = FD-
X VERMAJ = 2
-VERSION = 2.09
+VERSION = 2.09a
X PREFIX =
X CONFDIR =
X BUILD =
diff -urNP ../FD-2.09/makefile.lpc ./makefile.lpc
--- ../FD-2.09/makefile.lpc Tue Aug 22 00:00:00 2006
+++ ./makefile.lpc Tue Oct 31 00:00:00 2006
@@ -4,7 +4,7 @@
X
X TITLE = FD-
X VERMAJ = 2
-VERSION = 2.09
+VERSION = 2.09a
X PREFIX =
X CONFDIR =
X BUILD =
diff -urNP ../FD-2.09/mktankan.c ./mktankan.c
--- ../FD-2.09/mktankan.c Tue Aug 22 00:00:00 2006
+++ ./mktankan.c Tue Oct 31 00:00:00 2006
@@ -696,7 +696,8 @@
X char *argv[];
X {
X FILE *fp;
- char buf[MAXKANASTR + 1], kbuf[4 + 1], tbuf[sizeof(tankanstr) + 1];
+ char buf[MAXKANASTR + 1];
+ char kbuf[MAXKLEN * R_MAXKANA + 1], tbuf[sizeof(tankanstr) + 1];
X u_short code;
X int n, len;
X
diff -urNP ../FD-2.09/parse.c ./parse.c
--- ../FD-2.09/parse.c Tue Aug 22 00:00:00 2006
+++ ./parse.c Tue Oct 31 00:00:00 2006
@@ -103,7 +103,7 @@
X char *skipspace(cp)
X char *cp;
X {
- while (*cp == ' ' || *cp == '\t') cp++;
+ while (isblank2(*cp)) cp++;
X
X return(cp);
X }
@@ -587,10 +587,9 @@
X next = plist;
X for (cp = next; cp && *cp; cp = next) {
X #ifdef _USEDOSPATH
- if (_dospath(cp)) next = strchr(&(cp[2]), PATHDELIM);
- else
+ if (_dospath(cp)) next += 2;
X #endif
- next = strchr(cp, PATHDELIM);
+ next = strchr(next, PATHDELIM);
X len = (next) ? (next++) - cp : strlen(cp);
X if ((tmp = underpath(path, cp, len))) return(tmp);
X }
diff -urNP ../FD-2.09/pathname.c ./pathname.c
--- ../FD-2.09/pathname.c Tue Aug 22 00:00:00 2006
+++ ./pathname.c Tue Oct 31 00:00:00 2006
@@ -551,7 +551,7 @@
X {
X int i;
X
- if (d && _dospath(s)) return(s + 1);
+ if (d && _dospath(s)) return(&(s[1]));
X for (i = 0; s[i]; i++) {
X if (s[i] == _SC_) return(&(s[i]));
X # ifdef BSPATHDELIM
@@ -569,7 +569,7 @@
X char *cp;
X int i;
X
- if (d && _dospath(s)) cp = s + 1;
+ if (d && _dospath(s)) cp = &(s[1]);
X else cp = NULL;
X for (i = 0; s[i]; i++) {
X if (s[i] == _SC_) cp = &(s[i]);
@@ -635,6 +635,10 @@
X if (_dospath(s)) i = 2;
X else
X #endif
+#ifdef DOUBLESLASH
+ if (isdslash(s)) i = 1;
+ else
+#endif
X i = 0;
X if (!s[i]) return(&(s[i]));
X if (s[i] == _SC_ && !s[i + 1]) return(&(s[i + 1]));
@@ -674,6 +678,13 @@
X }
X else
X #endif
+#ifdef DOUBLESLASH
+ if (isdslash(s1)) {
+ buf[0] = s1[0];
+ i = 1;
+ }
+ else
+#endif
X i = 0;
X if (!s1[i]) cp = &(buf[i]);
X else if (s1[i] == _SC_ && !s1[i + 1]) {
@@ -717,9 +728,12 @@
X int strcasecmp2(s1, s2)
X char *s1, *s2;
X {
+ int c1, c2;
+
X for (;;) {
- if (toupper2(*s1) != toupper2(*s2))
- return((u_char)*s1 - (u_char)*s2);
+ c1 = toupper2(*s1);
+ c2 = toupper2(*s2);
+ if (c1 != c2) return(c1 - c2);
X #ifndef CODEEUC
X if (issjis1(*s1)) {
X s1++;
@@ -739,9 +753,12 @@
X char *s1, *s2;
X int n;
X {
+ int c1, c2;
+
X while (n-- > 0) {
- if (toupper2(*s1) != toupper2(*s2))
- return((u_char)*s1 - (u_char)*s2);
+ c1 = toupper2(*s1);
+ c2 = toupper2(*s2);
+ if (c1 != c2) return(c1 - c2);
X #ifndef CODEEUC
X if (issjis1(*s1)) {
X if (n-- <= 0) break;
@@ -784,7 +801,7 @@
X char *cp;
X
X if (len < 0) len = strlen(dir);
- if ((cp = strrdelim2(dir, &(dir[len]))) && !*(cp + 1)) len = cp - dir;
+ if ((cp = strrdelim2(dir, &(dir[len]))) && !cp[1]) len = cp - dir;
X if (len <= 0 || strnpathcmp(path, dir, len)) return(NULL);
X if (path[len] && path[len] != _SC_) return(NULL);
X
@@ -872,7 +889,7 @@
X int isrootpath(s)
X char *s;
X {
- return((s[0] == _SC_ && !s[1]));
+ return((s[0] == _SC_ && !s[1]) ? 1 : 0);
X }
X
X VOID copyrootpath(s)
@@ -889,12 +906,29 @@
X *s = '\0';
X }
X
+#ifdef DOUBLESLASH
+int isdslash(s)
+char *s;
+{
+# if MSDOS || defined (CYGWIN)
+ char *cp;
+
+ if (s[0] != _SC_ || s[1] != _SC_ || !s[2] || s[2] == _SC_) return(0);
+ if ((cp = strdelim(&(s[2]), 0))) return(cp - s);
+
+ return(strlen(s));
+# else
+ return((s[0] == _SC_ && s[1] == _SC_) ? 2 : 0);
+# endif
+}
+#endif /* DOUBLESLASH */
+
X char *getbasename(s)
X char *s;
X {
X char *cp;
X
- if ((cp = strrdelim(s, 1))) return(cp + 1);
+ if ((cp = strrdelim(s, 1))) return(&(cp[1]));
X
X return(s);
X }
@@ -1450,6 +1484,9 @@
X char ***argvp;
X wild_t *wp;
X {
+#ifdef DOUBLESLASH
+ int ds;
+#endif
X DIR *dirp;
X struct dirent *dp;
X struct stat st;
@@ -1473,6 +1510,14 @@
X quote = wp -> quote;
X
X if (wp -> fixed.len) addstrbuf(&(wp -> path), rootpath, 1);
+#ifdef DOUBLESLASH
+ if (wp -> path.len) ds = 0;
+ else if ((ds = isdslash(wp -> s))) {
+ addstrbuf(&(wp -> fixed), wp -> s, ds);
+ addstrbuf(&(wp -> path), wp -> s, ds);
+ wp -> s += ds;
+ }
+#endif
X
X for (i = w = 0; wp -> s[i] && wp -> s[i] != _SC_; i++) {
X pc = parsechar(&(wp -> s[i]), -1,
@@ -1519,6 +1564,9 @@
X
X if (!w) {
X if (wp -> path.len <= plen) w++;
+#ifdef DOUBLESLASH
+ else if (ds) st.st_mode = S_IFDIR;
+#endif
X else if (stat2(wp -> path.s, &st) < 0) return(argc);
X
X wp -> s += i;
@@ -1529,13 +1577,17 @@
X }
X
X #ifndef NODIRLOOP
+# ifdef DOUBLESLASH
+ if (ds) /*EMPTY*/;
+ else
+# endif
X if (!w) {
X wp -> ino = (devino_t *)realloc2(wp -> ino,
X (wp -> nino + 1) * sizeof(devino_t));
X wp -> ino[wp -> nino].dev = st.st_dev;
X wp -> ino[(wp -> nino)++].ino = st.st_ino;
X }
-#endif
+#endif /* !NODIRLOOP */
X return(_evalwild(argc, argvp, wp));
X }
X
@@ -1926,7 +1978,7 @@
X dlen = (next) ? (next++) - cp : strlen(cp);
X if (!dlen) tmp = NULL;
X else {
- tmp = _evalpath(cp, cp + dlen, 0);
+ tmp = _evalpath(cp, &(cp[dlen]), 0);
X dlen = strlen(tmp);
X }
X if (dlen + len + 1 + EXTWIDTH + 1 > size) {
@@ -2201,7 +2253,7 @@
X # endif
X next = strchr(cp, PATHDELIM);
X dlen = (next) ? (next++) - cp : strlen(cp);
- tmp = _evalpath(cp, cp + dlen, 0);
+ tmp = _evalpath(cp, &(cp[dlen]), 0);
X dlen = strlen(tmp);
X argc = completefile(file, len, argc, argvp, tmp, dlen, 2);
X free(tmp);
@@ -2219,6 +2271,9 @@
X # if MSDOS || (defined (FD) && !defined (_NODOSDRIVE))
X char cwd[4];
X # endif
+# ifdef DOUBLESLASH
+ int n;
+# endif
X char *file, *dir;
X int dlen;
X
@@ -2232,8 +2287,20 @@
X # endif
X
X if ((file = strrdelim(dir, 0))) {
- dlen += (file == dir) ? 1 : file - dir;
- return(completefile(file + 1, strlen(file + 1), argc, argvp,
+ if (file == dir) {
+ dlen++;
+ file++;
+ }
+# ifdef DOUBLESLASH
+ else if ((n = isdslash(path)) && file < &(path[n])) {
+ if (path[n - 1] != _SC_) return(argc);
+ dlen = n;
+ file = &(path[n]);
+ if (*file == _SC_) file++;
+ }
+# endif
+ else dlen += file++ - dir;
+ return(completefile(file, strlen(file), argc, argvp,
X path, dlen, exe));
X }
X # ifndef NOUID
@@ -2604,13 +2671,13 @@
X ret = NULL;
X len = strlen(s);
X if ((mode & ~0x80) != '#') {
- if (mode & 0x80) for (cp = s; cp < s + len; cp++) {
+ if (mode & 0x80) for (cp = s; cp < &(s[len]); cp++) {
X if (regexp_exec(re, cp, 0)) {
X ret = cp;
X break;
X }
X }
- else for (cp = s + len - 1; cp >= s; cp--) {
+ else for (cp = &(s[len - 1]); cp >= s; cp--) {
X if (regexp_exec(re, cp, 0)) {
X ret = cp;
X break;
@@ -3314,7 +3381,7 @@
X if (*cp == '`') {
X bbuf[j] = '\0';
X buf = replacebackquote(buf, &i,
- bbuf, strlen(cp + 1));
+ bbuf, strlen(&(cp[1])));
X j = 0;
X }
X else if (!(flags & EA_STRIPQ)) buf[i++] = *cp;
@@ -3520,7 +3587,10 @@
X {
X #if MSDOS && defined (FD) && !defined (_NOUSELFN)
X char alias[MAXPATHLEN];
- int top = -1;
+ int top;
+#endif
+#ifdef DOUBLESLASH
+ int ds;
X #endif
X char *cp, *tmp;
X int i, j, c, pc, size, quote;
@@ -3536,9 +3606,16 @@
X free(cp);
X cp = tmp;
X
+#if MSDOS && defined (FD) && !defined (_NOUSELFN)
+ top = -1;
+#endif
+#ifdef DOUBLESLASH
+ ds = isdslash(cp);
+#endif
X size = strlen(cp) + 1;
X tmp = malloc2(size);
X quote = '\0';
+
X for (i = j = c = 0; cp[i]; c = cp[i++]) {
X pc = parsechar(&(cp[i]), -1, '\0', 0, "e, NULL);
X if (pc == PC_CLQUOTE) {
@@ -3573,9 +3650,12 @@
X if (!(flags & EA_NOEVALQ)) continue;
X }
X else if (pc != PC_NORMAL) /*EMPTY*/;
- else if (!(flags & EA_NOUNIQDELIM)
- && cp[i] == _SC_ && c == _SC_)
- continue;
+ else if (flags & EA_NOUNIQDELIM) /*EMPTY*/;
+#ifdef DOUBLESLASH
+ else if (ds && i == 1) /*EMPTY*/;
+#endif
+ else if (cp[i] == _SC_ && c == _SC_) continue;
+
X tmp[j++] = cp[i];
X }
X tmp[j] = '\0';
diff -urNP ../FD-2.09/pathname.h ./pathname.h
--- ../FD-2.09/pathname.h Tue Aug 22 00:00:00 2006
+++ ./pathname.h Tue Oct 31 00:00:00 2006
@@ -21,6 +21,10 @@
X #define NESTINGQUOTE
X #endif
X
+#if defined (MINIMUMSHELL) && defined (DOUBLESLASH)
+#undef DOUBLESLASH
+#endif
+
X #define IFS_SET " \t\n"
X #define META '\\'
X #if MSDOS && defined (_NOORIGSHELL)
@@ -242,6 +246,9 @@
X extern int isrootpath __P_((char *));
X extern VOID copyrootpath __P_((char *));
X extern VOID copycurpath __P_((char *));
+#ifdef DOUBLESLASH
+extern int isdslash __P_((char *));
+#endif
X extern char *getbasename __P_((char *));
X extern char *getshellname __P_((char *, int *, int *));
X extern reg_t *regexp_init __P_((char *, int));
diff -urNP ../FD-2.09/rockridg.c ./rockridg.c
--- ../FD-2.09/rockridg.c Tue Aug 22 00:00:00 2006
+++ ./rockridg.c Tue Oct 31 00:00:00 2006
@@ -9,9 +9,6 @@
X
X #ifndef _NOROCKRIDGE
X
-extern char typesymlist[];
-extern u_short typelist[];
-
X #define TRANSTBLFILE "TRANS.TBL"
X #define TRANSTBLVAR 1
X #define RR_TRANS 001
@@ -171,7 +168,7 @@
X continue;
X }
X
- for (eol = cp; *eol && *eol != ' ' && *eol != '\t'; eol++);
+ for (eol = cp; *eol && !isblank2(*eol); eol++);
X if (*eol) *(eol++) = '\0';
X if (!*(eol = skipspace(eol))) {
X free(line);
@@ -180,15 +177,14 @@
X
X org = getorgname(cp, flags);
X cp = eol;
- while (*eol && *eol != ' ' && *eol != '\t') eol++;
+ while (*eol && !isblank2(*eol)) eol++;
X l1 = eol - cp;
X if (*eol) *(eol++) = '\0';
X l2 = 0;
X maj = min = (r_dev_t)-1;
X if (*line == 'L') {
X eol = skipspace(eol);
- while (eol[l2] && eol[l2] != ' ' && eol[l2] != '\t')
- l2++;
+ while (eol[l2] && !isblank2(eol[l2])) l2++;
X eol[l2++] = '\0';
X }
X else if (*line == 'B' || *line == 'C') {
@@ -433,8 +429,7 @@
X {
X transtable *tp;
X char *cp;
- u_short mode;
- int i, n;
+ u_int mode;
X
X if (!(cp = strrdelim(path, 0)) || !inittrans(path, cp++ - path))
X return(-1);
@@ -446,11 +441,7 @@
X }
X rr_curtbl = tp;
X
- n = tolower2(tp -> type);
- for (i = 0; typesymlist[i]; i++) if (n == typesymlist[i]) break;
- if (!typesymlist[i]) mode = S_IFREG;
- else mode = typelist[i];
-
+ if ((mode = getfmode(tp -> type)) == (u_int)-1) mode = S_IFREG;
X stp -> st_mode &= ~S_IFMT;
X stp -> st_mode |= mode;
X if ((mode == S_IFBLK || mode == S_IFCHR) && tp -> rdev != (r_dev_t)-1)
diff -urNP ../FD-2.09/roman.c ./roman.c
--- ../FD-2.09/roman.c Tue Aug 22 00:00:00 2006
+++ ./roman.c Tue Oct 31 00:00:00 2006
@@ -296,7 +296,7 @@
X u_int c;
X {
X #ifndef CODEEUC
- char *cp, buf[2 + 1], tmp[2 + 1];
+ char *cp, buf[MAXKLEN + 1], tmp[MAXKLEN + 1];
X #endif
X
X if (!(c & ~0xff)) {
@@ -310,7 +310,7 @@
X return(c | 0x8080);
X #else
X VOID_C code2kanji(tmp, c | 0x8080);
- cp = kanjiconv2(buf, tmp, 2, EUC, DEFCODE, L_INPUT);
+ cp = kanjiconv2(buf, tmp, MAXKLEN, EUC, DEFCODE, L_INPUT);
X if (kanjierrno) return(0);
X
X return(((u_char)(cp[0]) << 8) | (u_char)(cp[1]));
@@ -321,9 +321,9 @@
X char *buf;
X {
X #ifndef CODEEUC
- char tmp[2 + 1];
+ char tmp[MAXKLEN + 1];
X
- buf = kanjiconv2(tmp, buf, 2, DEFCODE, EUC, L_INPUT);
+ buf = kanjiconv2(tmp, buf, MAXKLEN, DEFCODE, EUC, L_INPUT);
X if (kanjierrno) return((u_int)0);
X #endif
X return((((u_char)(buf[0]) << 8) | (u_char)(buf[1])) & ~0x8080);
diff -urNP ../FD-2.09/shell.c ./shell.c
--- ../FD-2.09/shell.c Tue Aug 22 00:00:00 2006
+++ ./shell.c Tue Oct 31 00:00:00 2006
@@ -25,6 +25,12 @@
X #define O_TEXT 0
X #endif
X
+typedef struct _localetable {
+ char *env;
+ char *val;
+ char *org;
+} localetable;
+
X extern int mark;
X extern off_t marksize;
X extern char fullpath[];
@@ -95,6 +101,17 @@
X int n_args = 0;
X
X static short histbufsize[2] = {0, 0};
+static localetable localelist[] = {
+ {"LC_COLLATE", "C", NULL},
+ {"LC_CTYPE", "", NULL},
+ {"LC_MESSAGES", "C", NULL},
+ {"LC_MONETARY", "C", NULL},
+ {"LC_NUMERIC", "C", NULL},
+ {"LC_TIME", "C", NULL},
+ {"LC_ALL", NULL, NULL},
+ {"LANG", "C", NULL},
+};
+#define LOCALELISTSIZ arraysize(localelist)
X
X
X static int NEAR checksc(buf, ptr, arg)
@@ -205,11 +222,13 @@
X int len, optr;
X
X if (!arg || !*arg) return(checksc(*bufp, ptr, NULL) - ptr);
- if (!dir || !*dir) {
+ if (!dir) {
X #if MSDOS && !defined (_NOUSELFN)
X if ((flags & F_TOSFN) && shortname(arg, path) == path)
X arg = path;
+ else
X #endif
+ arg = convput(conv, arg, 1, 0, NULL, NULL);
X }
X else {
X strcatdelim2(path, dir, arg);
@@ -220,13 +239,12 @@
X if (arg[len] == _SC_) arg[len] = '/';
X }
X #endif
- }
-
- if (arg != path) arg = convput(conv, arg, 1, 0, NULL, NULL);
X #ifndef _NOKANJIFCONV
- else arg = kanjiconv2(conv, arg,
- MAXPATHLEN - 1, DEFCODE, fnamekcode, L_FNAME);
+ arg = kanjiconv2(conv, arg,
+ MAXPATHLEN - 1, DEFCODE, fnamekcode, L_FNAME);
X #endif
+ }
+
X optr = ptr;
X ptr = checksc(*bufp, ptr, arg);
X arg = killmeta(arg);
@@ -1298,7 +1316,7 @@
X char *cp, *tmp;
X int n, ret;
X
- while (*command == ' ' || *command == '\t') command++;
+ command = skipspace(command);
X if ((cp = evalalias(command))) command = cp;
X
X n = sigvecset(0);
@@ -1462,17 +1480,28 @@
X macrostat st;
X FILE *fp;
X char *tmp, *lang;
+ int i;
X
X internal_status = FNC_FAIL;
X st.flags = flags;
X if (isinternalcomm(command)) st.flags |= F_ARGSET;
X
X if (!(tmp = evalcommand(command, arg, &st))) return(NULL);
- if ((lang = strdup2(getenv2("LANG")))) setenv2("LANG", "C", 1);
+ for (i = 0; i < LOCALELISTSIZ; i++) {
+ localelist[i].org = strdup2(getenv2(localelist[i].env));
+ if (!(localelist[i].val) || *(localelist[i].val)) {
+ setenv2(localelist[i].env, localelist[i].val, 1);
+ continue;
+ }
+ lang = getenv2("LC_ALL");
+ if (!lang || !*lang) lang = getenv2(localelist[i].env);
+ if (!lang || !*lang) lang = getenv2("LANG");
+ setenv2(localelist[i].env, lang, 1);
+ }
X fp = popen2(tmp);
- if (lang) {
- setenv2("LANG", lang, 1);
- free(lang);
+ for (i = 0; i < LOCALELISTSIZ; i++) {
+ setenv2(localelist[i].env, localelist[i].org, 1);
+ if (localelist[i].org) free(localelist[i].org);
X }
X free(tmp);
X
diff -urNP ../FD-2.09/system.c ./system.c
--- ../FD-2.09/system.c Tue Aug 22 00:00:00 2006
+++ ./system.c Tue Oct 31 00:00:00 2006
@@ -125,6 +125,7 @@
X extern int completebuiltin __P_((char *, int, int, char ***));
X extern int completeinternal __P_((char *, int, int, char ***));
X # endif
+extern VOID initenv __P_((VOID_A));
X extern VOID evalenv __P_((char *, int));
X extern int underhome __P_((char *));
X extern int replaceargs __P_((int *, char ***, char **, int));
@@ -5746,7 +5747,7 @@
X addarg(&trp, rp, NULL, tptrp, 0);
X do {
X (*ptrp)++;
- } while (s[*ptrp] == ' ' || s[*ptrp] == '\t');
+ } while (isblank2(s[*ptrp]));
X
X /* for "esac " */
X if ((stype = getparenttype(trp)) != STT_INCASE
@@ -11237,6 +11238,7 @@
X setshellvar(envp);
X if (initshell(argc, argv) < 0) return(RET_FAIL);
X #ifdef FD
+ initenv();
X if (interactive) {
X # if MSDOS
X inittty(1);
diff -urNP ../FD-2.09/term.c ./term.c
--- ../FD-2.09/term.c Tue Aug 22 00:00:00 2006
+++ ./term.c Tue Oct 31 00:00:00 2006
@@ -1282,7 +1282,7 @@
X #if !MSDOS
X for (i = 0; i <= K_MAX - K_MIN; i++) keyseq[i].code = K_MIN + i;
X for (i = 21; i <= 30; i++)
- keyseq[K_F(i) - K_MIN].code = K_F(i - 20) | 01000;
+ keyseq[K_F(i) - K_MIN].code = K_F(i - 20) | K_ALTERNATE;
X #endif /* !MSDOS */
X
X return(0);
@@ -2063,7 +2063,7 @@
X }
X for (i = 0; i <= K_MAX - K_MIN; i++) keyseq[i].code = K_MIN + i;
X for (i = 21; i <= 30; i++)
- keyseq[K_F(i) - K_MIN].code = K_F(i - 20) | 01000;
+ keyseq[K_F(i) - K_MIN].code = K_F(i - 20) | K_ALTERNATE;
X sortkeyseq();
X
X return(0);
@@ -2106,7 +2106,7 @@
X
X if (str) {
X for (i = 0; i <= K_MAX - K_MIN; i++) {
- if ((keyseq[i].code & 0777) == n
+ if ((keyseq[i].code & ~K_ALTERNATE) == n
X || !(keyseq[i].str) || keyseq[i].len != len)
X continue;
X if (!memcmp(str, keyseq[i].str, len)) {
@@ -2750,8 +2750,8 @@
X #endif
X
X /*ARGSUSED*/
-int getkey2(sig)
-int sig;
+int getkey2(sig, code)
+int sig, code;
X {
X #if !defined (DJGPP) || defined (NOTUSEBIOS) || defined (PC98)
X static u_char tbuf1[3] = {0xff, 0xff, 0xff};
@@ -2818,10 +2818,9 @@
X int ungetch2(c)
X int c;
X {
- if (ungetnum >= arraysize(ungetbuf) - 1) return(EOF);
- if (ungetnum)
- memmove((char *)&(ungetbuf[1]), (char *)&(ungetbuf[0]),
- ungetnum * sizeof(u_char));
+ if (ungetnum >= arraysize(ungetbuf)) return(EOF);
+ memmove((char *)&(ungetbuf[1]), (char *)&(ungetbuf[0]),
+ ungetnum * sizeof(u_char));
X ungetbuf[0] = c;
X ungetnum++;
X
@@ -2948,8 +2947,9 @@
X return((int)ch);
X }
X
-int getkey2(sig)
-int sig;
+/*ARGSUSED*/
+int getkey2(sig, code)
+int sig, code;
X {
X static int count = SENSEPERSEC;
X kstree_t *p;
@@ -2976,9 +2976,9 @@
X else if (key != C_EKANA) /*EMPTY*/;
X # if !defined (_NOKANJICONV)
X # ifdef CODEEUC
- else if (inputkcode != EUC && inputkcode != NOCNV) /*EMPTY*/;
+ else if (code != EUC && code != NOCNV) /*EMPTY*/;
X # else
- else if (inputkcode != EUC) /*EMPTY*/;
+ else if (code != EUC) /*EMPTY*/;
X # endif
X # endif /* !_NOKANJICONV */
X else {
@@ -3012,8 +3012,7 @@
X if (key == keyseq[p -> next[j].key].str[0]) break;
X if (j >= p -> num) return(key);
X p = &(p -> next[j]);
- if (keyseq[p -> key].len == 1)
- return(keyseq[p -> key].code);
+ if (keyseq[p -> key].len == 1) return(keyseq[p -> key].code);
SHAR_EOF
: || $echo 'restore of' 'FD-2.09a.patch' 'failed'
fi
$echo 'End of' 'FD-2.09a.patch' 'part' '2'
$echo 'File' 'FD-2.09a.patch' 'is continued in part' '3'
echo 3 > _sh00584/seq
exit 0
--
しらい たかし
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735