diff options
author | sakamoto <sakamoto@pkgsrc.org> | 1999-06-08 09:37:36 +0000 |
---|---|---|
committer | sakamoto <sakamoto@pkgsrc.org> | 1999-06-08 09:37:36 +0000 |
commit | d186e2bdd15d6d12318fd3dfa80fe4e53fb26bcc (patch) | |
tree | fece77cf2163842dfc78baba39fc807451a21239 | |
parent | d1b4ded3d7ca4d2fca16a057666a63d4fb13d7cf (diff) | |
download | pkgsrc-d186e2bdd15d6d12318fd3dfa80fe4e53fb26bcc.tar.gz |
Import FreeBSD's "ja-sed" port:
GNU sed + multi-byte extension.
-rw-r--r-- | japanese/sed/Makefile | 20 | ||||
-rw-r--r-- | japanese/sed/files/md5 | 1 | ||||
-rw-r--r-- | japanese/sed/patches/patch-aa | 2215 | ||||
-rw-r--r-- | japanese/sed/patches/patch-ab | 25 | ||||
-rw-r--r-- | japanese/sed/pkg/COMMENT | 1 | ||||
-rw-r--r-- | japanese/sed/pkg/DESCR | 5 | ||||
-rw-r--r-- | japanese/sed/pkg/PLIST | 1 |
7 files changed, 2268 insertions, 0 deletions
diff --git a/japanese/sed/Makefile b/japanese/sed/Makefile new file mode 100644 index 00000000000..d5c395ecb3f --- /dev/null +++ b/japanese/sed/Makefile @@ -0,0 +1,20 @@ +# New ports collection makefile for: sed+mb +# Version required: 1.18+mb1.03 +# Date created: 2 April 1995 +# Whom: Nobuhiro Yasutomi <nobu@psrc.isac.co.jp> +# +# $Id: Makefile,v 1.1.1.1 1999/06/08 09:37:36 sakamoto Exp $ +# + +DISTNAME= sed-1.18 +PKGNAME= ja-sed-1.18 +CATEGORIES= japanese textproc +MASTER_SITES= ${MASTER_SITE_GNU} +MASTER_SITE_SUBDIR= sed + +MAINTAINER= ports@FreeBSD.ORG + +HAS_CONFIGURE= yes +PATCH_STRIP= -p1 + +.include <bsd.port.mk> diff --git a/japanese/sed/files/md5 b/japanese/sed/files/md5 new file mode 100644 index 00000000000..64affa877dd --- /dev/null +++ b/japanese/sed/files/md5 @@ -0,0 +1 @@ +MD5 (sed-1.18.tar.gz) = 9d66352d7e8775b0de3067ec267cdf49 diff --git a/japanese/sed/patches/patch-aa b/japanese/sed/patches/patch-aa new file mode 100644 index 00000000000..636ec90ce49 --- /dev/null +++ b/japanese/sed/patches/patch-aa @@ -0,0 +1,2215 @@ +$B!|!|!|!|!|(B GNU sed version 1.18 + multi-byte extension 1.03 $B!|!|!|!|!|(B +$B!|!|!|!|!|(B Jun. 2, 1994 by t^2 $B!|!|!|!|!|(B + + $B$3$N%U%!%$%k$O(B GNU sed version 1.18 (sed-1.18) $B$N%=!<%9%3!<%I$+$i(B, $B$=(B + $B$N%^%k%A%P%$%HJ8;zBP1~HG(B sed-1.18+mb1.03 $B$N%=!<%9%3!<%I$r@8@.$9$k$?$a(B + $B$N:9J,$r4^$s$G$$$^$9(B. sed-1.18 $B$N%=!<%9$rE83+$7$F$"$k%G%#%l%/%H%j$G(B + + % patch -p1 < $B$3$N%U%!%$%k(B + + $B$J$I$H$7$F%Q%C%A$rEv$F$F$/$@$5$$(B. $B$=$N8e(B README.MB $B$rFI$s$G$/$@$5$$(B. + +$B")(B810 $BJ!2,;TCf1{6hG_8w1`CDCO(B 7-207 +TEL/FAX: 092-731-4025 (TEL/FAX $B<+F0@ZBX$((B) + 092-724-6342 (TEL $B$N$_(B) +E-mail: NBC02362@niftyserve.or.jp t^2 ($BC+K\9'9@(B) + +diff -ru2N sed-1.18/ChangeLog.MB sed+mb1.03/ChangeLog.MB +--- sed-1.18/ChangeLog.MB Thu Jan 1 09:00:00 1970 ++++ sed+mb1.03/ChangeLog.MB Thu Jun 2 17:00:34 1994 +@@ -0,0 +1,206 @@ ++Thu Jun 2 16:56:47 1994 Takahiro Tanimoto (tt@isaac) ++ ++ * Version 1.18 + multi-byte extension 1.03 released. ++ ++Sat Mar 5 16:31:53 1994 Takahiro Tanimoto (tt@isaac) ++ ++ * README.MSC: PC-9800 $B%7%j!<%:MQ(B MS-C 6.00A $B$N(B, $B%o%$%k%I%+!<%IE8(B ++ $B3+%k!<%A%s$N%P%0$KBP=h$7$?(B. $B0JA0$N(B stdargv.diff $B$r$3$l$KE}9g$7(B, ++ $B:o=|$7$?(B. (Thanks to $BJ!9@K.$5$s(B <GFE00522@niftyserve.or.jp>) ++ ++Sat Aug 21 18:03:33 1993 Takahiro Tanimoto (tt at pc98) ++ ++ * Version 1.18 + multi-byte extension 1.02 released. ++ ++Thu Aug 19 03:48:33 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * regex.c (re_compile_fastmap): charset_not $B$N(B fastmap $B$N:n@.=h(B ++ $BM}$,4V0c$C$F$$$F(B, fastmap $B$r;HMQ$9$k>l9g(B (sed $B$b4^$^$l$k(B), $B@55,(B ++ $BI=8=$N@hF,$N(B [^$B#A(B] $B$d(B [^a] $B$KNc$($P(B $B#B(B $B$,%^%C%A$7$J$+$C$?(B. ++ (Thanks to $B>.20NIM4$5$s(B <JAE03716@niftyserve.or.jp>) ++ ++Tue Aug 10 00:23:37 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * regex.c (set_list_bits): $BJ8;z%/%i%9Cf$N%^%k%A%P%$%HJ8;z$N:GE,(B ++ $B2=$G(B, $B6h4V=*E@$N99?7=hM}ItJ,$K%P%0$,$"$j(B, [$B#A(B-$B#C#E(B-$B#G#B(B-$B#D(B] $B$r:G(B ++ $BE,2=$9$k$H(B [$B#A(B-$B#G(B] $B$@$,(B, $B$3$l$,(B [$B#A(B-$B#E(B] $B$H$J$C$F$7$^$C$F$$$?(B. ++ ++Fri Jul 23 15:59:26 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * Version 1.18 + multi-byte extension 1.01 released. ++ ++Fri Jul 23 02:05:23 1993 Takahiro Tanimoto (tt at pc98) ++ ++ * DEFS.dos: strcmpi(), strncmpi() $B$r(B stricmp(), strnicmp() $B$KJQ(B ++ $B99(B. ++ ++ * sed.c (main): MS-DOS $B$N>l9g(B, argv[0] $B$+$i%G%#%l%/%H%jL>(B, $B3HD%(B ++ $B;R$r<h$j=|$-(B, $B>.J8;z$K$7$F$+$i(B argv[0], myname $B$X%;%C%H$9$k$h$&(B ++ $B$KJQ99$7$?(B. ++ ++ * stdargv.diff: $BDI2C(B. ++ ++Sun Jul 11 02:31:13 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * sed.c (compare_mbcs): $BF1$8%*%V%8%'%/%H$KBP$9$k%]%$%s%?$rEO$5$l(B ++ $B$?;~$K$O(B 0 $B$rJV$9$h$&$K=$@5(B. ++ ++Sat Jul 10 17:12:46 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * configure.in: strncasecmp $B$N%A%'%C%/$rDI2C(B. ++ ++ * sed.c (main): $B%^%k%A%P%$%HJ8;z$N%?%$%W;XDj%*%W%7%g%s$N7A<0$r(B ++ gawk-2.15.2+mb1.01, grep-2.0+mb1.01 $B$K9g$o$;$FJQ99(B. ++ ++ * grep-2.0+mb1.01 $B$+$i(B mbc.[ch] $B$rM"F~(B. regex.[ch], sed.c $B$r$=(B ++ $B$l$K=>$C$F=q$-49$($?(B. ++ ++ * regex.c (print_compiled_pattern): printf() $B$G(B syntax $B$N=PNO=q(B ++ $B<0$,4V0c$C$F$$$?(B. ++ ++ * regex.h: $BDj?t$N8e$K(B U, UL $B$r$D$1$k$H(B old-C $B$G%3%s%Q%$%k$G$-$J(B ++ $B$$(B. $B$3$l$i$r%-%c%9%H$KJQ99$7$?(B. ++ ++ * regex.h: RE_DUP_MAX $B$NDj5A$r(B 16 $B%S%C%H(B int $B$N%^%7%s$G$b%*!<%P(B ++ $B%U%m!<$7$J$$=q$-J}$K=$@5(B. ++ ++Sat Jul 3 06:53:23 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * Version 1.18 + multi-byte extension 1.00 released. ++ ++Fri Jul 2 11:33:41 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * regex.c (regex_compile): set_list_bits $B$+$i$NJV$jCM$NH=Dj$K%P(B ++ $B%0$,$"$C$?$N$r=$@5(B. ($BH=Dj$NI,MW$,$J$$ItJ,$@$C$?$N$GC1$K:o=|$7$?(B.) ++ ++ * sed.c (compile_program), regex.c (set_list_bits): $B;HMQ$7$F$$$J(B ++ $B$$JQ?t$,$"$C$?$N$G:o=|$7$?(B. ++ ++Fri Jul 2 10:34:35 1993 Takahiro Tanimoto (tt at pc98) ++ ++ * regex.c (re_match_2): $B%]%$%s%?F1;N$r(B int $B$K%-%c%9%H$7$F$+$iHf(B ++ $B3S$7$F$$$kItJ,$,$"$C$?$,(B, $B$=$N%-%c%9%H$r:o=|$7$?(B. $B%*%j%8%J%k$N(B ++ $B:n<T$,2?$N$?$a$K%-%c%9%H$7$F$$$?$N$+$OITL@(B. ++ ++ * utils.c (add1_buffer): 16 $B%S%C%H(B int $B$N$?$a$K=$@5(B. ++ ++ * sed.c (compile_program): y $B%3%^%s%I$N=hM}$r(B 16 $B%S%C%H(B int $B$N$?(B ++ $B$a$K=$@5(B. ++ ++ * regex.c (regcmp): $BJQ?t(B syntax $B$N@k8@$,(B unsigned $B$H$J$C$F$$$?$N(B ++ $B$r(B reg_syntax_t $B$K=$@5$7$?(B. ++ ++ * regex.c (at_endline_loc_p): $B0z?t(B syntax $B$N@k8@$,(B int $B$H$J$C$F(B ++ $B$$$?$N$r(B reg_syntax_t $B$K=$@5$7$?(B. ++ ++ * regex.c (print_compiled_pattern): syntax $B$NI=<(ItJ,$r=$@5(B. ++ ++ * regex.h (reg_syntax_t, RE_BACKSLASH_ESCAPE_IN_LISTS): 16 $B%S%C(B ++ $B%H(B int $B$N%^%7%s$G$O(B reg_syntax_t == unsigned $B$G$O%*!<%P%U%m!<$9(B ++ $B$k$?$a(B, unsigned long $B$H$7$?(B. ++ ++ * sed.c (read_file): MSDOS $B$N$H$-(B errno, sys_errlist, sys_nerr ++ $B$r@k8@$7$J$$$h$&$K=$@5(B. <stdlib.h> $B$G@k8@$5$l$F$$$FB?=EDj5A%(%i!<(B ++ $B$K$J$k(B. ++ ++ * sed.c: MS-C (6.00A) $B$K$O%W%m%H%?%$%W@k8@Cf$G(B ++ ++ void foo(int x, int); ++ ++ $B$N$h$&$KJQ?tL>$rIU$1$?0z?t$H7?;XDj$@$1$N0z?t$r:.:_$5$;$k$H%(%i!<(B ++ $B$K$J$k$H$$$&%P%0$,$"$C$?(B. compile_program $B$N%W%m%H%?%$%W@k8@$,(B ++ $B$3$N%P%0$N$;$$$GDL$i$J$+$C$?$?$aJQ?tL>$rDI2C$7$F2sHr$7$?(B. ++ ++ * Makefile.msc DEFS.dos: DOS $B%5%]!<%H$N$?$aDI2C(B. ++ ++Sat Jun 19 09:53:47 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * Version 1.18 + multi-byte extension 0.04 released. ++ ++ * sed.c (compile_program): y $B%3%^%s%I$N=hM}$,0lIt(B byte order $B$K(B ++ $B0MB8$7$F$$$F(B, little endian $B$N%^%7%s$G8mF0:n$7$F$$$?(B. (Thanks ++ to $BD9ED?N;V$5$s(B <QFH02545@niftyserve.or.jp>) ++ ++Wed Jun 2 02:10:51 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * sed-1.17-1.18.diff $B$rE,MQ(B. ++ ++Tue Jun 1 20:33:36 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * Version 1.17 + multi-byte extension 0.03 released. ++ ++ * Version 1.15 $B"*(B 1.17 $B$NJQ99$r;\$7$?(B. ++ ++Tue May 25 00:12:06 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * Version 1.15 + multi-byte extension 0.02 released. ++ ++Mon May 24 15:37:50 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * sed.c: $BITI,MW$J(B isascii() $B$r:o=|$7$?(B. ++ ++ * regex.c (re_search_2): $B8eJ}$X(B advance $B$9$k:]$N%P%0$r=$@5(B. ++ ++ * sed-1.14-1.15.diff $B$rE,MQ(B. ++ ++Sat May 22 02:05:32 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * regex.c (re_match_2): exactn $B$N=hM}ItJ,$G(B, #if 0 $B$r(B #if 1 $B$K$7(B ++ $B$?>l9g(B, $B@5$7$$=hM}$r9T$C$F$$$J$+$C$?$N$r=$@5(B. ++ ++Fri May 21 21:49:36 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * Version 1.14b + multi-byte extension 0.01. ++ ++ * regex.[ch]: mbcharset, mbcharset_not $B$rGQ;_(B. $BBe$o$j$K(B ++ charset, charset_not $B$,%^%k%A%P%$%HJ8;z$r$bJ];}$9$k(B. ++ ++ * regex.c (set_list_bits), regex.h (RE_TRANSLATED_RANGE): $BGQ;_(B. ++ ++Wed May 19 05:27:18 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * sed.c (execute_program): l $B%3%^%s%I$G%^%k%A%P%$%HJ8;z$r=PNO$9(B ++ $B$k$h$&$KJQ99$7$?(B. (Shift-JIS $B$N:]$NH>3Q%+%JJ8;z$b(B.) ++ ++Tue May 18 01:36:54 1993 Takahiro Tanimoto (tt@albert) ++ ++ * configure.in: memmove() $B$N%A%'%C%/$rDI2C(B. ++ ++ * regex.h: !__STDC__ $B$N$H$-$K(B const $B$N(B #define $B$rDI2C(B. ++ ++ * sed.c (compile_regex): [^]...] $B$N07$$$K%*%j%8%J%k$N%P%0$,$"$C(B ++ $B$?$,(B, $B%^%k%A%P%$%HBP1~$KJQ99$9$k:](B, $B<+F0E*$K(B fix $B$5$l$?(B. ++ ++Mon May 17 03:37:51 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * regex.h (RE_TRANSLATED_RANGE): $B2<5-$N5!G=$NA*Br$N$?$a$KDI2C(B. ++ ++ * regex.c (set_list_bits, regex_compile): translate([a-z]) $B$N2r(B ++ $B<a$r?75l$I$A$i$NJ}K!$G9T$&$+$r(B syntax $B$GA*Br$G$-$k$h$&$K$7$?(B. ++ ++Sun May 16 15:12:18 1993 Takahiro Tanimoto (tt@isaac) ++ ++ * regex.c (regex_compile): GNU regex $B$O(B, $BNc$($P(B, ++ translate('A') = 'A', ++ translate('B') = 'B', ++ translate('C') = 'C', ++ translate('a') = 'A', ++ translate('b') = 'b', ++ translate('c') = 'C' ++ $B$H$J$C$F$$$k>l9g$K(B, translate([a-z]) $B$r(B, $B0JA0$O(B [ABC] $B$H$7$F2r<a(B ++ $B$7$F$$$?$,(B, $B:G6a$N$b$N$O(B [AbC] $B$H2r<a$9$k$h$&$KJQ99$5$l$F$$$k(B. ++ $B$3$l$r8E$$2r<a$KLa$7$?(B. $B$"$^$j4X78$O$J$$$,(B, translate $B4XO"$K$O(B, ++ $B%*%j%8%J%k$N%P%0$,$"$k$h$&$@(B. $B$?$H$($P(B, x $B$,%a%?%-%c%i%/%?(B 'Y' ++ $B$+$I$&$+$rH=CG$9$k$N$K(B, translate(x) == 'Y', translate(x) == ++ translate('Y'), x == 'Y' $B$H$$$C$?(B, $BMM!9$J%F%9%HJ}K!$,%=!<%9Cf$K(B ++ $B;6:_$7$F$$$k(B. $B%a%?%-%c%i%/%?$O(B translate $B$GJQ99$G$-$J$$$H;W$C$F(B ++ $B$*$$$?$[$&$,$$$$(B. ++ ++ ++Local Variables: ++mode: indented-text ++left-margin: 8 ++fill-column: 72 ++fill-prefix: " " ++version-control: never ++End: +diff -ru2N sed-1.18/DEFS.dos sed+mb1.03/DEFS.dos +--- sed-1.18/DEFS.dos Thu Jan 1 09:00:00 1970 ++++ sed+mb1.03/DEFS.dos Fri Jul 23 16:07:18 1993 +@@ -0,0 +1,10 @@ ++#define __STDC__ 1 ++#define STDC_HEADERS 1 ++#define HAVE_STRING_H 1 ++#define HAVE_VPRINTF 1 ++#define HAVE_MEMCPY 1 ++#define HAVE_MEMMOVE 1 ++#define HAVE_STRCASECMP 1 ++#define HAVE_STRNCASECMP 1 ++#define strcasecmp(x, y) stricmp(x, y) ++#define strncasecmp(x, y, n) strnicmp(x, y, n) +diff -ru2N sed-1.18/Makefile.in sed+mb1.03/Makefile.in +--- sed-1.18/Makefile.in Tue May 18 06:26:28 1993 ++++ sed+mb1.03/Makefile.in Fri Jul 23 02:49:14 1993 +@@ -18,4 +18,7 @@ + # the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + ++# Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto) ++# Last change: Jul. 23, 1993 by t^2 ++ + SHELL = /bin/sh + +@@ -38,4 +41,12 @@ + + DEFS = @DEFS@ ++ ++# Things you might set to MBCTYPE_DEF to spec. default multi-byte char type. ++# -DEUC will make default multi-byte char type EUC and ++# -DSJIS SJIS. ++# If you do not set EUC/SJIS, sed assumes no multi-byte ++# char as default. ++MBCTYPE_DEF = -DEUC ++ + LIBS = @LIBS@ + +@@ -55,9 +66,10 @@ + #### End of system configuration section. #### + +-objs = sed.o utils.o regex.o getopt.o getopt1.o +-srcs = sed.c utils.c regex.c getopt.c getopt1.c alloca.c ++objs = sed.o utils.o regex.o getopt.o getopt1.o mbc.o ++srcs = sed.c utils.c regex.c getopt.c getopt1.c mbc.c alloca.c + + distfiles = COPYING COPYING.LIB ChangeLog README INSTALL Makefile.in \ +- configure configure.in regex.h getopt.h $(srcs) ++ configure configure.in regex.h getopt.h $(srcs) \ ++ ChangeLog.MB README.MB Makefile.msc DEFS.dos mbc.h stdargv.diff + + all_objs= $(objs) $(extra_objs) +@@ -65,5 +77,5 @@ + + .c.o: +- $(CC) -c $(CFLAGS) $(CPPFLAGS) $(DEFS) -I$(srcdir) $< ++ $(CC) -c $(CFLAGS) $(CPPFLAGS) $(DEFS) $(MBCTYPE_DEF) -I$(srcdir) $< + + sed: $(all_objs) +@@ -72,4 +84,5 @@ + sed.o regex.o: regex.h + sed.o getopt1.o: getopt.h ++sed.o regex.o: mbc.h + + install: all +@@ -91,5 +104,6 @@ + + dist: $(distfiles) +- echo sed-`sed -e '/version_string/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q sed.c` > .fname ++ echo -n sed-`sed -e '/version_string/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q sed.c` > .fname ++ echo +mb`sed -e '/^ + multi-byte extension/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q sed.c` >> .fname + rm -rf `cat .fname` + mkdir `cat .fname` +@@ -99,5 +113,6 @@ + + dist.afs: $(distfiles) +- echo sed-`sed -e '/version_string/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q sed.c` > .fname ++ echo -n sed-`sed -e '/version_string/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q sed.c` > .fname ++ echo +mb`sed -e '/^ + multi-byte extension/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q sed.c` >> .fname + rm -rf `cat .fname` + mkdir `cat .fname` +diff -ru2N sed-1.18/Makefile.msc sed+mb1.03/Makefile.msc +--- sed-1.18/Makefile.msc Thu Jan 1 09:00:00 1970 ++++ sed+mb1.03/Makefile.msc Fri Jul 23 02:49:14 1993 +@@ -0,0 +1,106 @@ ++# Generated automatically from Makefile.in by configure. ++# Makefile for GNU SED, a batch editor. ++# Copyright (C) 1987, 1991 Free Software Foundation, Inc. ++# ++# This file is part of GNU SED. ++# ++# GNU SED is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2, or (at your option) ++# any later version. ++# ++# GNU SED is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with GNU SED; see the file COPYING. If not, write to ++# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++# Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto) ++# Last change: Jul. 23, 1993 by t^2 ++ ++#### Start of system configuration section. #### ++ ++srcdir = . ++VPATH = . ++ ++CC = cl -nologo -AL ++INSTALL = cp ++INSTALL_PROGRAM = $(INSTALL) ++ ++# Things you might add to DEFS: ++# -DSTDC_HEADERS If you have ANSI C headers and libraries. ++# -DUSG If you have System V/ANSI C string ++# and memory functions and headers. ++# -D__CHAR_UNSIGNED__ If type `char' is unsigned. ++# gcc defines this automatically. ++# -DNO_VFPRINTF If you lack vprintf function (but have _doprnt). ++# ++# For DOS, you must add them in DEFS.dos ++ ++# Things you might set to MBCTYPE_DEF to spec. default multi-byte char type. ++# -DEUC will make default multi-byte char type EUC and ++# -DSJIS SJIS. ++# If you do not set EUC/SJIS, sed assumes no multi-byte ++# char as default. ++MBCTYPE_DEF = -DSJIS ++ ++LIBS = setargv /link /noe /st:10000 ++ ++CFLAGS = -Ox -DREGEX_MALLOC=1 ++LDFLAGS = ++extra_objs = ++ ++prefix = ++exec_prefix = $(prefix) ++ ++# Prefix for each installed program, normally empty or `g'. ++binprefix = ++ ++# Where to install the executable. ++bindir = $(exec_prefix)/bin ++ ++#### End of system configuration section. #### ++ ++objs = sed.obj utils.obj regex.obj getopt.obj getopt1.obj mbc.obj ++srcs = sed.c utils.c regex.c getopt.c getopt1.c mbc.c alloca.c ++ ++distfiles = COPYING COPYING.LIB ChangeLo README INSTALL Makefile.in \ ++ configur configur.in regex.h getopt.h $(srcs) \ ++ ChangeLo.MB README.MB Makefile.msc DEFS.dos mbc.h stdargv.dif ++ ++all_objs= $(objs) $(extra_objs) ++all: sed.exe ++ ++.c.obj: ++ cat defs.dos $*.c > $*_.c ++ $(CC) -c $(CFLAGS) $(CPPFLAGS) $(MBCTYPE_DEF) -I$(srcdir) -Fo$*.obj $*_.c ++ rm $*_.c ++ ++sed.exe: $(all_objs) ++ $(CC) -o $@ $(LDFLAGS) $(all_objs) $(LIBS) ++ ++sed.obj regex.obj: regex.h ++sed.obj getopt1.obj: getopt.h ++sed.obj regex.obj: mbc.h ++ ++install: all ++ $(INSTALL_PROGRAM) sed.exe $(bindir)/$(binprefix)sed.exe ++ ++TAGS: $(srcs) ++ etags $(srcs) ++ ++clean: ++ rm -f sed.exe *.obj ++ ++mostlyclean: clean ++ ++distclean: clean ++ rm -f Makefile config.sta ++ ++realclean: distclean ++ rm -f TAGS ++ ++alloca.obj : alloca.c +diff -ru2N sed-1.18/README.MB sed+mb1.03/README.MB +--- sed-1.18/README.MB Thu Jan 1 09:00:00 1970 ++++ sed+mb1.03/README.MB Thu Jun 2 16:27:07 1994 +@@ -0,0 +1,228 @@ ++$B!|!|!|!|!|(B GNU sed version 1.18 + multi-byte extension 1.03 $B!|!|!|!|!|(B ++$B!|!|!|!|!|(B Jun. 2, 1994 by t^2 $B!|!|!|!|!|(B ++ ++ sed-1.18+mb1.03 -- $B%^%k%A%P%$%HJ8;zBP1~HG(B GNU sed ++ ++$B!|35MW(B ++ ++ GNU $B%W%m%8%'%/%H$K$h$k(B sed $B$r%^%k%A%P%$%HJ8;zBP1~2=$7$?$b$N$G$9(B. ++ ++$B!|;HMQK!(B ++ ++ GNU sed $B$+$i$N3HD%ItJ,$@$1$r@bL@$7$^$9(B. ++ ++ $BA}$($?%*%W%7%g%s$O0J2<$NDL$j$G$9(B. ++ ++ -Wctype=ASCII $B$^$?$O(B --ctype=ASCII ++ $B%^%k%A%P%$%HJ8;z$r9MN8$7$^$;$s(B. $B$3$N%*%W%7%g%s$r;HMQ$7$?>l(B ++ $B9g(B, GNU sed $B$N%*%j%8%J%k$HF1$8F0:n$K$J$k$O$:$G$9(B. ++ ++ -Wctype=EUC $B$^$?$O(B --ctype=EUC ++ $B%^%k%A%P%$%HJ8;z$H$7$F(B EUC $B$rG'<1$7$^$9(B. ++ ++ -Wctype=SJIS $B$^$?$O(B --ctype=SJIS ++ $B%^%k%A%P%$%HJ8;z$H$7$F(B Shift-JIS $B$rG'<1$7$^$9(B. ++ ++ MS-DOS $B0J30$N%7%9%F%`$G(B, Makefile(.in)? $B$r=q$-49$($:$K%$%s%9%H!<(B ++ $B%k$7$?>l9g(B, $B%G%U%)%k%H$G$O(B EUC $B$rG'<1$7$^$9(B. MS-DOS $B$G$O%G%U%)(B ++ $B%k%H$G(B Shift-JIS $B$rG'<1$7$^$9(B. ++ ++ $B0J2<(B, $B%3%^%s%I$J$I$NJQ99E@$G$9(B. ++ ++ y $B%3%^%s%I(B $B%P%$%HKh$G$O$J$/J8;zKh$KJQ49$7$^$9(B. ++ ++ l $B%3%^%s%I(B $B%^%k%A%P%$%HJ8;z$r9MN8$7$?=PNO$r9T$$$^$9(B. $BFC$K(B, ++ EUC $B$NH>3Q%+%J$NJ8;zI}$r9MN8$7$F$$$^$9(B. ++ ++ $B$=$NB>(B $B%i%Y%k$K%^%k%A%P%$%HJ8;z$,;HMQ$G$-$^$9(B. ++ ++$B!|(B SEDM103.LZH (MS-DOS $BHG<B9T7A<0$r4^$`%"!<%+%$%V(B) $B$K$D$$$F(B ($B$=$l0J30$N(B ++ $B7ABV$GF~<j$5$l$?J}$OL5;k$7$F$/$@$5$$(B) ++ ++ 1. $B%"!<%+%$%V$K4^$^$l$F$$$k%U%!%$%k(B ++ ++ $B%*%j%8%J%k$+$iA4$/<j$r2C$($F$$$J$$%U%!%$%k(B ++ ++ CHANGELO $B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k(B ChangeLog ++ COPYING $B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k(B COPYING ++ COPYING.LIB $B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k(B COPYING.LIB ++ README $B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k(B README ++ ++ sed+mb $BMQ$N%U%!%$%k(B ++ ++ CHANGELO.MB sed+mb $B$NJQ99MzNr(B ++ README.MB $B$3$N%U%!%$%k(B ++ ++ MS-DOS $BHG(B sed+mb $BMQ$N%U%!%$%k(B ++ ++ SED.EXE MS-DOS $BHG(B sed-1.18+mb1.03 $B$N<B9T7A<0(B ++ ++ 2. SED.EXE $B$K$D$$$F(B ++ ++ sed-1.18+mb1.03 $B$r(B MS-C 6.00A $B$G%3%s%Q%$%k$7$?$b$N$G$9(B. ++ ++ $B%G%U%)%k%H$G$O(B Shift-JIS $B4A;z%3!<%I$r4^$`%W%m%0%i%`$d%U%!%$%k$r(B ++ $B=hM}$G$-$^$9(B. ++ ++ setargv.obj $B$rAH$_9~$s$G$"$j$^$9$N$G(B, MS-DOS $B$G%]%T%e%i!<$J%?%$(B ++ $B%W$N%o%$%k%I%+!<%I$,;HMQ$G$-$^$9(B. ++ ++ 3. $B%3%^%s%I%i%$%s0z?t$K$D$$$F(B ++ ++ $BA0=R$7$?$H$*$j(B MS-C $B$N(B setargv.obj $B$r%j%s%/$7$F$$$^$9$N$G(B, $B$=$N(B ++ $B;EMM$K=>$o$J$1$l$P$J$j$^$;$s(B. ++ ++ $B#1$D#1$D$N0z?t$O6uGr$G6h@Z$j$^$9(B. $B0z?t$K6uGr(B, ", \, <, >, | $B$r(B ++ $B4^$`$H$-$O%/%)!<%F%#%s%0$,I,MW$G$9(B. $B$=$NJ}K!$O(B COMMAND.COM $B$N%P(B ++ $B%0=-$$;EMM$H(B, $B$5$i$K(B setargv.obj $B$K$bLdBj$,$"$j(B, $B$+$J$jFq$7$$$N(B ++ $B$G$3$3$G$O@bL@$r>J$-$^$9(B. $B3F<+8&5f$7$F$/$@$5$$(B. $B0lHV4JC1$J$N$O(B, ++ sed $B$N%W%m%0%i%`$r%U%!%$%k$K$7$F(B ++ ++ sed -f $B%U%!%$%kL>(B ++ ++ $B$H$9$k$3$H$G$9(B. ++ ++$B!|%$%s%9%H!<%k(B (MS-DOS $B0J30(B) ++ ++ $B%G%U%)%k%H$N%^%k%A%P%$%HJ8;z$N@_Dj$O(B, Makefile.in $B$NCf$G;XDj$7$^$9(B. ++ $B%G%U%)%k%H$r(B Shift-JIS $B$H$9$k>l9g$H(B, $B%G%U%)%k%H$G%^%k%A%P%$%HJ8;z$r(B ++ $B;HMQ$7$J$$>l9g$O(B Makefile.in $B$N(B MBCTYPE_DEF $B%^%/%m$NDj5A$r$=$l$>$l0J(B ++ $B2<$N$h$&$KJQ$($F$/$@$5$$(B. ++ ++ MBCTYPE_DEF = -DSJIS ($B%G%U%)%k%H$G(B Shift-JIS $B$N>l9g(B) ++ MBCTYPE_DEF = ($B%G%U%)%k%H$G;HMQ$7$J$$>l9g(B) ++ ++ $B$$$:$l$N>l9g$G$b5/F0;~$N%*%W%7%g%s$K$h$j%^%k%A%P%$%HJ8;z%3!<%I$NA*Br(B ++ $B$,2DG=$G$9(B. ++ ++ $B$=$NB>$N:n6H$O(B, $B%*%j%8%J%k$N(B sed $B$HF1MM$G$9$N$G(B INSTALL $B$r$*FI$_$/$@(B ++ $B$5$$(B. ++ ++$B!|%$%s%9%H!<%k(B (MS-DOS $BHG(B) ++ ++ MS-C 6.00A $B$r;HMQ$7$F(B, $B%G%U%)%k%H$G(B Shift-JIS $B$rG'<1$9$k(B sed $B$r:n@.(B ++ $B$9$k>l9g$O(B, README.MSC $B$KL\$rDL$7$F(B, $BI,MW$J$i%i%$%V%i%j$K%Q%C%A$rEv(B ++ $B$F$?8e(B, ++ ++ A>nmake -f Makefile.msc ++ ++ $B$@$1$G#O#K$G$9(B. $B$=$NB>$N=hM}7O$r;HMQ$9$k>l9g$d(B, $B%G%U%)%k%H$r(B ++ Shift-JIS $B0J30$K$7$?$$>l9g$O(B Makefile.msc $B$r;29M$K(B Makefile $B$r=q$$$F(B ++ $B$/$@$5$$(B. ++ ++$B!|%P%0(B ++ ++ 1. $B$$$o$f$k(B JIS $B$K$OBP1~$7$F$$$^$;$s(B. $B>-MhBP1~$9$kM=Dj$b$"$j$^$;$s(B. ++ ++ 2. $B%^%k%A%P%$%HJ8;z%3!<%I$O$"$^$j873J$K$O9M$($F$$$^$;$s(B. ++ ++ EUC $B#1%P%$%HL\(B ... 0x80 - 0xff ++ EUC $B#2%P%$%HL\(B ... 0x01 - 0xff (0x0a $B$r=|$/(B) ++ ++ Shift-JIS $B#1%P%$%HL\(B ... 0x80 - 0x9f, 0xe0 - 0xff ++ Shift-JIS $B#2%P%$%HL\(B ... 0x01 - 0xff (0x0a $B$r=|$/(B) ++ ++ $B$H$7$F=hM}$7$F$$$^$9(B. $BH>3Q%+%J$b;H$($^$9(B. EUC $B$N(B SS3 (0x8f) $B$K(B ++ $B;O$^$k#3%P%$%H%3!<%I$O;H$($^$;$s(B. ($B;d$O$3$l$r%5%]!<%H$7$F$$$k%7(B ++ $B%9%F%`$r8+$?$3$H$,$J$$(B...) ++ ++$B!|(B regex.[ch] $B$N3HD%;EMM(B ++ ++ regex.[ch] $B%b%8%e!<%k$O(B mbc.[ch] $B%b%8%e!<%k$K0MB8$7$F$$$^$9$N$G(B, $B;H(B ++ $BMQ$9$k>l9g$K$O(B, mbc.[ch] $B%b%8%e!<%k$rF1;~$K;HMQ$9$kI,MW$,$"$j$^$9(B. ++ ++ $B%^%k%A%P%$%HJ8;z$N%?%$%W$O(B, mbc.[ch] $B$N(B mbcinit() $B$G@_Dj$7$^$9(B. ++ mbc.h $B$KDj5A$5$l$F$$$k%^%/%m(B MBCTYPE_ASCII, MBCTYPE_EUC, ++ MBCTYPE_SJIS $B$N$$$:$l$+$r(B mbcinit() $B$KEO$7$F$/$@$5$$(B. ++ ++ regex.[ch] $B$O(B, $B%Q%?!<%s%3%s%Q%$%k;~(B, $B%^%C%A%s%0;~$NN>J}$G(B mbc.[ch] ++ $B$N@_Dj$r;2>H$7$^$9(B. $B$,(B, $B$3$NN><T$G(B mbc.[ch] $B$N@_Dj$rJQ99$9$k$3$H$O(B ++ $B$G$-$^$;$s(B. $B$D$^$j(B, Shift-JIS $B$G5-=R$5$l$?%Q%?!<%s$r(B, EUC $B%F%-%9%H(B ++ $B$+$i8!:w$9$k$H$$$C$?F0:n$O$G$-$^$;$s(B. $BCm0U$7$F$/$@$5$$(B. ++ ++ $B%^%k%A%P%$%HJ8;zBP1~$KH<$C$FCm0U$9$Y$-@55,I=8=$r0J2<$K5-$7$^$9(B. ++ ++ . $BG$0U$N#1%P%$%HJ8;z(B, $B@5Ev$J%^%k%A%P%$%HJ8;z$K%^%C%A$7$^$9(B. ++ $B!V@5Ev$J%^%k%A%P%$%HJ8;z!W$H$O(B, $B%^%k%A%P%$%HJ8;z$N#1J8;z(B ++ $BL\$K(B, '\0' $B$^$?$O(B '\n' $B0J30$,B3$/J8;z$N$3$H$G$9(B. ++ ++ [x-y] $BJ8;z%3!<%I(B ($BFbItI=8=(B) $B$,(B x $B$+$i(B y $B$NHO0O$K$"$kG$0U$N#1J8(B ++ $B;z$K%^%C%A$7$^$9(B. $B$3$l$b(B . $B$HF1$8$/(B, $B@5Ev$G$J$$J8;z$K$O(B ++ $B%^%C%A$7$^$;$s(B. ++ ++ [^x-y] $BJ8;z%3!<%I(B ($BFbItI=8=(B) $B$,(B x $B$+$i(B y $B$NHO0O$K$J$$G$0U$N#1J8(B ++ $B;z$K%^%C%A$7$^$9(B. $B@5Ev$G$J$$J8;z$K$b%^%C%A$7$^$9(B. ++ ++ $B%^%k%A%P%$%HJ8;z$NFbItI=8=$OC1$K#1%P%$%HL\$r>e0L%P%$%H(B, $B#2%P%$%HL\$r(B ++ $B2<0L%P%$%H$H$7$?#1#6%S%C%HId9f$J$7@0?t$G$9(B. Shift-JIS $B$G$b(B EUC $B$G$b(B ++ ++ $B#1%P%$%H(B ASCII $BJ8;z(B < $BH>3Q%+%JJ8;z(B < $BA43QJ8;z(B ++ ++ $B$H$$$&Bg>.4X78$,@.$jN)$C$F$$$^$9(B. ++ ++$B!|>r7o$J$I(B ++ ++ 1. $B%*%j%8%J%k$N(B GNU sed $B$NCx:n8"$O(B Free Software Foundation, Inc. $B$,(B ++ $BM-$7$F$$$^$9(B. $B%Q%C%AItJ,(B (sed-mb.diff) $B$NCx:n8"$O;d(B (t^2) $B$,M-$7(B ++ $B$F$$$^$9(B. ++ ++ 2. GNU sed $B$N%=!<%9%3!<%I$O3F=j$N(B ftp $B%5%$%H(B, $B$b$7$/$O(B Nifty-serve ++ $B$N(B FUNIX $B$N%G!<%?%i%$%V%i%j$+$iF~<j2DG=$G$9(B. GNU sed $B$+$i(B sed+mb ++ $B$X$N:9J,(B sed-mb.diff $B$O;d$,(B Nifty-serve $B$N(B FUNIX $B$XEPO?$7(B, $BF21`OB(B ++ $BO:;a(B (dohzono@sdsft.kme.mei.co.jp) $B$,(B fj.sources $B$X%]%9%H$7$F$/$@(B ++ $B$5$C$F$$$^$9(B. ++ ++ 3. $B:9J,(B sed-mb.diff $B$N:FG[I[$O<+M3$G$9(B. $B$3$l$K4X$7$F$O(B FSF $B$N5,Dj$K(B ++ $B=>$&I,MW$b$"$j$^$;$s(B. $B$7$+$7:9J,$rE,MQ$7$?7k2L$N%=!<%9%3!<%I(B, $B$*(B ++ $B$h$S<B9T7A<0$G$N:FG[I[$N:]$O(B GNU GENERAL PUBLIC LICENSE (COPYING ++ $B;2>H(B) $B$K=>$C$F$/$@$5$$(B. ++ ++ sed+mb $B$K2?$i$+$N2~JQ$r2C$($?$b$N$r:FG[I[$9$k:]$b(B, GNU GENERAL ++ PUBLIC LICENSE $B$K=>$&$h$&$KCm0U$7$F$/$@$5$$(B. $B$^$?(B sed+mb $B$K4^$^$l(B ++ $B$k%3!<%I(B (regex.[ch] $B$J$I(B) $B$rMxMQ$7$?%W%m%0%i%`$rG[I[$9$k:]$b(B GNU ++ GENERAL PUBLIC LICENSE $B$^$?$O(B GNU LIBRARY GENERAL PUBLIC LICENSE ++ (COPYING.LIB $B;2>H(B) $B$N3:EvItJ,$K=>$C$F$/$@$5$$(B. ++ ++ $B$^$?5AL3$G$O$"$j$^$;$s$,:FG[I[$5$l$kJ}$O;v8e$K$G$bO"Mm$r$/$@$5$$(B. ++ $B$=$7$F2DG=$J8B$j(B, $B?7$7$$%P!<%8%g%s$X$N%"%C%W%G!<%H$KEX$a(B, $BMxMQ<T(B ++ $B$+$i$NO"Mm$,;d$KFO$/$h$&$KG[N8$7$F$/$@$5$$(B. ++ ++ 4. $B$3$N%W%m%0%i%`$OL5J]>Z$G$9(B. ++ ++ 5. sed+mb $B$K2?$i$+$NIT6q9g$,H/@8$7$?>l9g(B, (FSF $B$d(B, $B%*%j%8%J%k$N:n<T(B ++ $B$G$O$J$/(B) $B;d$KO"Mm$7$F$/$@$5$$(B. $BG[I[$7$??M$,4uK>$7$F$$$k>l9g$O(B, ++ $B$=$N?M$KO"Mm$7$F$/$@$5$$(B. ++ ++ 6. $B$4<ALd(B/$B$4MWK>(B/$B$*<8$j(B, $B$=$NB>$bBg4?7^$G$9(B. $B$G$-$k$+$.$j%5%]!<%H$7(B ++ $B$^$9(B. ++ ++$B!|<U<-(B ++ ++ $B86:n<T$*$h$S(B FSF $B$K46<U$7$^$9(B. ++ ++ $B%I%-%e%a%s%H:n@.$K4X$7$F=u8@$r$/$@$5$C$?F21`OBO:;a(B ++ (dohzono@sdsft.kme.mei.co.jp) $B$K46<U$7$^$9(B. ++ ++ $B$3$l$^$GE>:\(B/$B%P%0Js9p$r$/$@$5$C$?J}!9$K46<U$7$^$9(B. $B<BL>$r5s$2$5$;$F(B ++ $BD:$-$?$+$C$?$N$G$9$,%O!<%I%G%#%9%/$N%H%i%V%k$G$[$H$s$I$N%a!<%k$r>C<:(B ++ $B$5$;$F$7$^$$$^$7$?(B. ++ ++ $B:G8e$K(B, $B5.=E$J%G%#%9%/%9%Z!<%9$r(B sed+mb $B$N$?$a$K3d$$$F$4;HMQD:$$$F$$(B ++ $B$k$9$Y$F$NMxMQ<T$NJ}!9$K46<U$$$?$7$^$9(B. ++ ++$B!|!V;d!W$NO"Mm@h(B ++ ++ $B")(B810 $BJ!2,;TCf1{6hG_8w1`CDCO(B 7-207 ($BCm(B: $BE>5o$7$^$7$?(B) ++ TEL/FAX: 092-731-4025 (TEL/FAX $B<+F0@ZBX$((B) ++ 092-724-6342 (TEL $B$N$_(B) ++ E-mail: NBC02362@niftyserve.or.jp $BC+K\9'9@(B ++ ++# Local variables: ++# mode: indented-text ++# indent-tabs-mode: nil ++# tab-stop-list: (4 8 16 24 32 40 48 56 64 72 80) ++# left-margin: 4 ++# fill-column: 72 ++# fill-prefix: " " ++# version-control: never ++# End: +diff -ru2N sed-1.18/README.MSC sed+mb1.03/README.MSC +--- sed-1.18/README.MSC Thu Jan 1 09:00:00 1970 ++++ sed+mb1.03/README.MSC Sat Mar 5 16:14:14 1994 +@@ -0,0 +1,99 @@ ++PC-9801 $BMQ(B MS-C version 6.00A $B$N0z?t$N%;%C%H%"%C%W%k!<%A%s$K$O%P%0$,$"$j(B ++$B$^$9(B. ++ ++#include <stdio.h> ++ ++int ++main(int argc, char **argv) ++{ ++ int i; ++ ++ for (i = 0; i <= argc; i++) ++ printf("argv[%d] == %s\n", i, argv[i]); ++ return 0; ++} ++ ++$B$r%3%s%Q%$%k(B, $B%j%s%/$7$?(B FOO.EXE $B$K(B ++ ++ A>foo "\\" abc ++ ++$B$J$I$N0z?t$rEO$7$F<B9T$9$k$H(B, $B%P%0$,3NG'$G$-$^$9(B. $B$^$?(B, $B%o%$%k%I%+!<%I(B ++$BE83+%k!<%A%s$K$b%P%0$,$"$j(B, $B>e5-$N%W%m%0%i%`$r(B SETARGV.OBJ $B$H$H$b$K%j%s(B ++$B%/$7$F(B ++ ++ A>foo \DOS\*.com ++ ++$B$J$I$N0z?t$G<B9T$9$k$H(B, $B$*$+$7$JE83+$N;EJ}$r$7$F$7$^$$$^$9(B. ++ ++$B$3$N%P%0$O(B SOURCE/STARTUP $B2<$N(B DOS/STDARGV.ASM $B$*$h$S(B WILD.C $B$K0J2<$N%Q%C(B ++$B%A$rEv$F$k$H=$@5$G$-$k$h$&$G$9(B. $B%Q%C%A$rEv$F$F(B STARTUP.BAT $B$G%3%s%Q%$%k(B ++$B$7$F$/$@$5$$(B. $B$=$N8e(B, $BNc$($P%i!<%8%b%G%kMQ$N%i%$%V%i%j$r=$@5$9$k>l9g(B, ++L/DOS/STDARGV.OBJ, L/DOS/_SETARGV.OBJ, L/WILD.OBJ $B$r$=$l$>$l(B ++KSTDARGV.OBJ, _KSTARGV.OBJ, KWILD.OBJ $B$H%j%M!<%`$7(B, ++ ++ lib \msc6\lib\llibce.lib-+dos\kstdargv.obj-+dos\_kstargv.obj-+kwild.obj; ++ ++$B$J$I$H$7$F%b%8%e!<%k$r99?7$7$F$/$@$5$$(B. $BG0$N$?$a$3$N:n6H$r9T$&A0$K(B, ++ ++ lib \msc6\lib\llibce.lib*kstdargv.obj*_kstargv.obj*kwild.obj; ++ ++$B$J$I$G(B, kstdargv.obj, _kstargv.obj, kwild.obj $B$N%P%C%/%"%C%W$r$H$C$FCV$/(B ++$B$H$$$$$G$7$g$&(B. ++ ++$B$J$*(B, $B$3$N%Q%C%A$OEvA3$N$3$H$J$,$iL5J]>Z$G$9(B. ++ ++Mar. 5, 1994 t^2 ++ ++*** stdargv.org Mon Oct 8 19:50:46 1990 ++--- stdargv.asm Thu Jul 22 17:50:44 1993 ++*************** ++*** 409,415 **** ++ shr cx,1 ++ adc dx,cx ; add 1 for every pair of backslashes ++ test al,1 ; plus 1 for the " if odd number of \ ++! jz arg310 ; [J1] ++ jmp arg210 ; [J1] ++ ; ++ ; Command line is fully parsed - compute number of bytes needed ++--- 409,415 ---- ++ shr cx,1 ++ adc dx,cx ; add 1 for every pair of backslashes ++ test al,1 ; plus 1 for the " if odd number of \ ++! jnz arg310 ; ! Jul.21.93 t^2 ++ jmp arg210 ; [J1] ++ ; ++ ; Command line is fully parsed - compute number of bytes needed ++ ++*** wild.org Mon Oct 8 19:49:48 1990 ++--- wild.c Sat Mar 5 00:42:12 1994 ++*************** ++*** 186,197 **** ++ char *ptr2 = arg; // [J1] ++ ++ if(ptr != arg) { // [J1] ++! while(ptr2 + 1 != ptr && *ptr2 != SLASHCHAR && *ptr2 != FWDSLASHCHAR ++! && *ptr2 != ':') { // [J1] ++ if(iskanji(*ptr2)) ptr2++; // [J1] ++ ptr2++; // [J1] ++ } // [J1] ++! ptr = ptr2; // [J1] ++ } // [J1] ++ ++ if (*ptr == ':' && ptr != arg+1) /* weird name, just add it as is */ ++--- 186,201 ---- ++ char *ptr2 = arg; // [J1] ++ ++ if(ptr != arg) { // [J1] ++! char *ptr3 = arg; ++! ++! while (ptr2 < ptr) { ++! if (*ptr2 == SLASHCHAR || *ptr2 == FWDSLASHCHAR ++! || *ptr2 == ':') ++! ptr3 = ptr2; ++ if(iskanji(*ptr2)) ptr2++; // [J1] ++ ptr2++; // [J1] ++ } // [J1] ++! ptr = ptr3; ++ } // [J1] ++ ++ if (*ptr == ':' && ptr != arg+1) /* weird name, just add it as is */ +diff -ru2N sed-1.18/configure sed+mb1.03/configure +--- sed-1.18/configure Fri May 21 15:09:06 1993 ++++ sed+mb1.03/configure Sat Jul 10 18:18:47 1993 +@@ -294,5 +294,5 @@ + fi + +-for func in bcopy memcpy ++for func in bcopy memcpy memmove strncasecmp + do + trfunc=HAVE_`echo $func | tr '[a-z]' '[A-Z]'` +diff -ru2N sed-1.18/configure.in sed+mb1.03/configure.in +--- sed-1.18/configure.in Fri May 21 13:22:42 1993 ++++ sed+mb1.03/configure.in Sat Jul 10 17:54:03 1993 +@@ -9,5 +9,5 @@ + AC_HAVE_HEADERS(string.h) + AC_VPRINTF +-AC_HAVE_FUNCS(bcopy memcpy) ++AC_HAVE_FUNCS(bcopy memcpy memmove strcasecmp strncasecmp) + AC_CONST + AC_ALLOCA +diff -ru2N sed-1.18/mbc.c sed+mb1.03/mbc.c +--- sed-1.18/mbc.c Thu Jan 1 09:00:00 1970 ++++ sed+mb1.03/mbc.c Fri Jul 9 14:38:28 1993 +@@ -0,0 +1,98 @@ ++/* Functions for multi-byte support. ++ Created for grep multi-byte extension Jul., 1993 by t^2 (Takahiro Tanimoto) ++ Last change: Jul. 9, 1993 by t^2 */ ++#include "mbc.h" ++ ++static const unsigned char mbctab_ascii[] = { ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++}; ++ ++static const unsigned char mbctab_euc[] = { ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ++}; ++ ++static const unsigned char mbctab_sjis[] = { ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ++ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ++}; ++ ++#ifdef EUC ++const unsigned char *mbctab = mbctab_euc; ++int current_mbctype = MBCTYPE_EUC; ++#else ++#ifdef SJIS ++const unsigned char *mbctab = mbctab_sjis; ++int current_mbctype = MBCTYPE_SJIS; ++#else ++const unsigned char *mbctab = mbctab_ascii; ++int current_mbctype = MBCTYPE_ASCII; ++#endif ++#endif ++ ++void ++#ifdef __STDC__ ++mbcinit(int mbctype) ++#else ++mbcinit(mbctype) ++ int mbctype; ++#endif ++{ ++ switch (mbctype) { ++ case MBCTYPE_ASCII: ++ mbctab = mbctab_ascii; ++ current_mbctype = MBCTYPE_ASCII; ++ break; ++ case MBCTYPE_EUC: ++ mbctab = mbctab_euc; ++ current_mbctype = MBCTYPE_EUC; ++ break; ++ case MBCTYPE_SJIS: ++ mbctab = mbctab_sjis; ++ current_mbctype = MBCTYPE_SJIS; ++ break; ++ } ++} +diff -ru2N sed-1.18/mbc.h sed+mb1.03/mbc.h +--- sed-1.18/mbc.h Thu Jan 1 09:00:00 1970 ++++ sed+mb1.03/mbc.h Fri Jul 9 14:40:03 1993 +@@ -0,0 +1,38 @@ ++#ifndef MBC_H ++#define MBC_H 1 ++/* Definitions for multi-byte support. ++ Created for grep multi-byte extension Jul., 1993 by t^2 (Takahiro Tanimoto) ++ Last change: Jul. 9, 1993 by t^2 */ ++ ++#ifndef const ++#ifndef __STDC__ ++#ifdef __GNUC__ ++#define const __const__ ++#define volatile __volatile__ ++#else ++#define const ++#define volatile ++#endif ++#endif ++#endif ++ ++#ifndef _ ++#ifdef __STDC__ ++#define _(x) x ++#else ++#define _(x) () ++#endif ++#endif ++ ++#define MBCTYPE_ASCII 0 ++#define MBCTYPE_EUC 1 ++#define MBCTYPE_SJIS 2 ++ ++extern const unsigned char *mbctab; ++extern int current_mbctype; ++ ++void mbcinit _((int)); ++ ++#define ismbchar(c) mbctab[(unsigned char)c] ++ ++#endif /* !MBC_H */ +diff -ru2N sed-1.18/regex.c sed+mb1.03/regex.c +--- sed-1.18/regex.c Mon May 24 01:10:46 1993 ++++ sed+mb1.03/regex.c Thu Aug 19 04:16:32 1993 +@@ -19,4 +19,6 @@ + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ++/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto) ++ Last change: Aug. 19, 1993 by t^2 */ + + /* AIX requires this to be the first thing in the file. */ +@@ -54,6 +56,33 @@ + #define bcmp(s1, s2, n) memcmp ((s1), (s2), (n)) + #endif ++#ifdef HAVE_MEMMOVE + #ifndef bcopy +-#define bcopy(s, d, n) memcpy ((d), (s), (n)) ++#define bcopy(s, d, n) memmove ((d), (s), (n)) ++#endif ++#else ++#ifndef HAVE_BCOPY ++static void ++#ifdef __STDC__ ++bcopy (const void *s0, void *d0, size_t n) ++#else ++bcopy (s, d, n) ++ const void *s0; ++ void *d; ++ size_t n; ++#endif ++{ ++ const char *s = s0; ++ char *d = d0; ++ ++ if (s < d) { ++ s += n, d += n; ++ while (n--) ++ *--d = *--s; ++ } ++ else ++ while (n--) ++ *d++ = *s++; ++} ++#endif + #endif + #ifndef bzero +@@ -123,4 +152,5 @@ + /* Get the interface, including the syntax bits. */ + #include "regex.h" ++#include "mbc.h" + + /* isalpha etc. are used for the character classes. */ +@@ -450,4 +480,19 @@ + + #endif /* DEBUG */ ++ ++#define STORE_MBC(p, c) \ ++ ((p)[0] = (unsigned char) ((c) >> 8), (p)[1] = (unsigned char) (c)) ++#define STORE_MBC_AND_INCR(p, c) \ ++ (*(p)++ = (unsigned char) ((c) >> 8), *(p)++ = (unsigned char) (c)) ++ ++#define EXTRACT_MBC(p) \ ++ ((unsigned char) (p)[0] << 8 | (unsigned char) (p)[1]) ++#define EXTRACT_MBC_AND_INCR(p) \ ++ ((p) += 2, (unsigned char) (p)[-2] << 8 | (unsigned char) (p)[-1]) ++ ++#define EXTRACT_UNSIGNED(p) \ ++ ((unsigned char) (p)[0] | (unsigned char) (p)[1] << 8) ++#define EXTRACT_UNSIGNED_AND_INCR(p) \ ++ ((p) += 2, (unsigned char) (p)[-2] | (unsigned char) (p)[-1] << 8) + + /* If DEBUG is defined, Regex prints many voluminous messages about what +@@ -544,4 +589,8 @@ + { + putchar ('/'); ++ if (ismbchar (*p) && 2 <= mcnt) { ++ printf ("/%.2s", (char *) p), p += 2, --mcnt; ++ continue; ++ } + printchar (*p++); + } +@@ -574,4 +623,5 @@ + printf ("/charset%s", + (re_opcode_t) *(p - 1) == charset_not ? "_not" : ""); ++ printf ("/%d", *p); + + assert (p + *p < pend); +@@ -589,4 +639,13 @@ + } + p += 1 + *p; ++ { ++ unsigned short i, size; ++ ++ size = EXTRACT_UNSIGNED_AND_INCR (p); ++ printf ("/0/%d", size); ++ for (i = 0; i < size; i++) ++ printf ("//%.2s-//%.2s", (char *) p, (char *) p + 2), ++ p += 4; ++ } + break; + } +@@ -744,5 +803,5 @@ + printf ("not_bol: %d\t", bufp->not_bol); + printf ("not_eol: %d\t", bufp->not_eol); +- printf ("syntax: %d\n", bufp->syntax); ++ printf ("syntax: %lu\n", bufp->syntax); + /* Perhaps we should print the translate table? */ + } +@@ -843,5 +902,7 @@ + static boolean at_begline_loc_p (), at_endline_loc_p (); + static boolean group_in_compile_stack (); ++#if 0 + static reg_errcode_t compile_range (); ++#endif + + /* Fetch the next character in the uncompiled pattern---translating it +@@ -852,5 +913,6 @@ + do {if (p == pend) return REG_EEND; \ + c = (unsigned char) *p++; \ +- if (translate) c = translate[c]; \ ++ if (translate && !ismbchar (c)) \ ++ c = (unsigned char) translate[(unsigned char) c]; \ + } while (0) + +@@ -870,5 +932,7 @@ + `char *', to avoid warnings when a string constant is passed. But + when we use a character as a subscript we must make it unsigned. */ +-#define TRANSLATE(d) (translate ? translate[(unsigned char) (d)] : (d)) ++#define TRANSLATE(d) (translate \ ++ ? (unsigned char) translate[(unsigned char) (d)] \ ++ : (d)) + + +@@ -1040,4 +1104,159 @@ + || STREQ (string, "cntrl") || STREQ (string, "blank")) + ++/* Handle charset(_not)?. ++ ++ Structure of charset(_not)? in compiled pattern. ++ ++ struct { ++ unsinged char id; charset(_not)? ++ unsigned char sbc_size; ++ unsigned char sbc_map[sbc_size]; same as original up to here. ++ unsigned short mbc_size; number of intervals. ++ struct { ++ unsigned short beg; beginning of interval. ++ unsigned short end; end of interval. ++ } intervals[mbc_size]; ++ }; */ ++ ++static reg_errcode_t ++#ifdef __STDC__ ++set_list_bits (unsigned short c1, unsigned short c2, ++ reg_syntax_t syntax, unsigned char *b, const char *translate) ++#else ++set_list_bits (c1, c2, syntax, b, translate) ++ unsigned short c1, c2; ++ reg_syntax_t syntax; ++ unsigned char *b; ++ const char *translate; ++#endif ++{ ++ unsigned char sbc_size = b[-1]; ++ unsigned short mbc_size = EXTRACT_UNSIGNED (&b[sbc_size]); ++ unsigned short beg, end, upb; ++ ++ if (c1 > c2) ++ return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR; ++ if (c1 < 1 << BYTEWIDTH) { ++ upb = c2; ++ if (1 << BYTEWIDTH <= upb) ++ upb = (1 << BYTEWIDTH) - 1; /* The last single-byte char */ ++ if (sbc_size <= upb / BYTEWIDTH) { ++ /* Allocate maximum size so it never happens again. */ ++ /* NOTE: memcpy() would not work here. */ ++ bcopy (&b[sbc_size], &b[(1 << BYTEWIDTH) / BYTEWIDTH], 2 + mbc_size*4); ++ bzero (&b[sbc_size], (1 << BYTEWIDTH) / BYTEWIDTH - sbc_size); ++ b[-1] = sbc_size = (1 << BYTEWIDTH) / BYTEWIDTH; ++ } ++ if (!translate) { ++ for (; c1 <= upb; c1++) ++ if (!ismbchar (c1)) ++ SET_LIST_BIT (c1); ++ } ++ else ++ for (; c1 <= upb; c1++) ++ if (!ismbchar (c1)) ++ SET_LIST_BIT (TRANSLATE (c1)); ++ if (c2 < 1 << BYTEWIDTH) ++ return REG_NOERROR; ++ c1 = 0x8000; /* The first wide char */ ++ } ++ b = &b[sbc_size + 2]; ++ ++ /* intervals[beg] ++ $B!|(B----------$B!|(B $B!|(B----------$B!|(B ++ c1 ++ $B!{(B----------------------$B!|(B ++ ++ $B>e?^$N$h$&$J6h4V$N%$%s%G%C%/%9(B beg $B$r7hDj$9$k(B. */ ++ for (beg = 0, upb = mbc_size; beg < upb; ) { ++ unsigned short mid = (beg + upb) >> 1; ++ ++ if (c1 - 1 > EXTRACT_MBC (&b[mid*4 + 2])) ++ beg = mid + 1; ++ else ++ upb = mid; ++ } ++ ++ /* intervals[end] ++ $B!|(B-------$B!|(B $B!|(B----------$B!|(B ++ c2 ++ $B!|(B---------------$B!{(B ++ ++ $B>e?^$N$h$&$J6h4V$N%$%s%G%C%/%9(B end $B$r7hDj$9$k(B. */ ++ for (end = beg, upb = mbc_size; end < upb; ) { ++ unsigned short mid = (end + upb) >> 1; ++ ++ if (c2 >= EXTRACT_MBC (&b[mid*4]) - 1) ++ end = mid + 1; ++ else ++ upb = mid; ++ } ++ ++ if (beg != end) { ++ /* $B4{B8$N6h4V$r>/$J$/$H$b(B1$B$DE}9g$9$k>l9g(B, ++ $B6h4V$N;OE@(B, $B=*E@$r=$@5$9$k(B. */ ++ if (c1 > EXTRACT_MBC (&b[beg*4])) ++ c1 = EXTRACT_MBC (&b[beg*4]); ++ if (c2 < EXTRACT_MBC (&b[end*4 - 2])) ++ c2 = EXTRACT_MBC (&b[end*4 - 2]); ++ } ++ if (end < mbc_size && end != beg + 1) ++ /* $BDI2C$5$l$k6h4V$N8e$m$K4{B8$N6h4V$r0\F0$9$k(B. */ ++ /* NOTE: memcpy() would not work here. */ ++ bcopy (&b[end*4], &b[(beg + 1)*4], (mbc_size - end)*4); ++ STORE_MBC (&b[beg*4 + 0], c1); ++ STORE_MBC (&b[beg*4 + 2], c2); ++ mbc_size += beg + 1 - end; ++ STORE_NUMBER (&b[-2], mbc_size); ++ return REG_NOERROR; ++} ++ ++static int ++#ifdef __STDC__ ++is_in_list (unsigned short c, const unsigned char *b) ++#else ++is_in_list (c, b) ++ unsigned short c; ++ const unsigned char *b; ++#endif ++{ ++ unsigned short size; ++ int in = (re_opcode_t) b[-1] == charset_not; ++ ++ size = *b++; ++ if (c < 1 << BYTEWIDTH) { ++ if (c / BYTEWIDTH < size && b[c / BYTEWIDTH] & 1 << c % BYTEWIDTH) ++ in = !in; ++ } ++ else { ++ unsigned short i, j; ++ ++ b += size + 2; ++ size = EXTRACT_UNSIGNED (&b[-2]); ++ ++ /* intervals[i] ++ $B!|(B-------$B!|(B $B!|(B--------$B!|(B ++ c ++ $B!{(B----------------$B!|(B ++ ++ $B>e?^$N$h$&$J6h4V$N%$%s%G%C%/%9(B i $B$r7hDj$9$k(B. */ ++ for (i = 0, j = size; i < j; ) { ++ unsigned short k = (i + j) >> 1; ++ ++ if (c > EXTRACT_MBC (&b[k*4 + 2])) ++ i = k + 1; ++ else ++ j = k; ++ } ++ if (i < size && EXTRACT_MBC (&b[i*4]) <= c ++ /* [...] $B$+$i(B, $BL58z$J%^%k%A%P%$%HJ8;z$r=|30$9$k(B. $B$3$3$G$O4JC1$N(B ++ $B$?$a#2%P%$%HL\$,(B '\n' $B$^$?$O(B '\0' $B$@$1$rL58z$H$7$?(B. [^...] ++ $B$N>l9g$O(B, $B5U$KL58z$J%^%k%A%P%$%HJ8;z$r%^%C%A$5$;$k(B. */ ++ && ((unsigned char) c != '\n' && (unsigned char) c != '\0')) ++ in = !in; ++ } ++ return in; ++} ++ + /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX. + Returns one of error codes defined in `regex.h', or zero for success. +@@ -1350,4 +1569,6 @@ + { + boolean had_char_class = false; ++ unsigned short c, c1; ++ int last_char = -1; + + if (p == pend) return REG_EBRACK; +@@ -1355,5 +1576,6 @@ + /* Ensure that we have enough space to push a charset: the + opcode, the length count, and the bitset; 34 bytes in all. */ +- GET_BUFFER_SPACE (34); ++ /* + 2 + 4 for mbcharset(_not)? with just one interval. */ ++ GET_BUFFER_SPACE (34 + 2 + 4); + + laststart = b; +@@ -1372,5 +1594,5 @@ + + /* Clear the whole map. */ +- bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH); ++ bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH + 2); + + /* charset_not matches newline according to a syntax bit. */ +@@ -1382,7 +1604,14 @@ + for (;;) + { ++ int size; ++ + if (p == pend) return REG_EBRACK; + +- PATFETCH (c); ++ if ((size = EXTRACT_UNSIGNED (&b[(1 << BYTEWIDTH) / BYTEWIDTH]))) ++ /* Ensure the space is enough to hold another interval ++ of multi-byte chars in charset(_not)?. */ ++ GET_BUFFER_SPACE (32 + 2 + size*4 + 4); ++ ++ PATFETCH_RAW (c); + + /* \ might escape characters inside [...] and [^...]. */ +@@ -1391,6 +1620,16 @@ + if (p == pend) return REG_EESCAPE; + +- PATFETCH (c1); +- SET_LIST_BIT (c1); ++ PATFETCH_RAW (c1); ++ if (ismbchar (c1)) { ++ unsigned char c2; ++ ++ PATFETCH_RAW (c2); ++ c1 = c1 << 8 | c2; ++ (void) set_list_bits (c1, c1, syntax, b, translate); ++ last_char = c1; ++ continue; ++ } ++ SET_LIST_BIT (TRANSLATE (c1)); ++ last_char = c1; + continue; + } +@@ -1407,4 +1646,11 @@ + return REG_ERANGE; + ++ if (ismbchar (c)) { ++ unsigned char c2; ++ ++ PATFETCH_RAW (c2); ++ c = c << 8 | c2; ++ } ++ + /* Look ahead to see if it's a range when the last thing + was a character: if this is a hyphen not at the +@@ -1412,10 +1658,25 @@ + operator. */ + if (c == '-' ++#if 0 /* The original was: */ + && !(p - 2 >= pattern && p[-2] == '[') + && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') ++#else /* I wonder why he did not write like this. ++ Have we got any problems? */ ++ && p != p1 + 1 ++#endif + && *p != ']') + { +- reg_errcode_t ret +- = compile_range (&p, pend, translate, syntax, b); ++ reg_errcode_t ret; ++ ++ assert (last_char >= 0); ++ PATFETCH_RAW (c1); ++ if (ismbchar (c1)) { ++ unsigned char c2; ++ ++ PATFETCH_RAW (c2); ++ c1 = c1 << 8 | c2; ++ } ++ ret = set_list_bits (last_char, c1, syntax, b, translate); ++ last_char = c1; + if (ret != REG_NOERROR) return ret; + } +@@ -1426,7 +1687,15 @@ + + /* Move past the `-'. */ +- PATFETCH (c1); +- +- ret = compile_range (&p, pend, translate, syntax, b); ++ PATFETCH_RAW (c1); ++ ++ PATFETCH_RAW (c1); ++ if (ismbchar (c1)) { ++ unsigned char c2; ++ ++ PATFETCH_RAW (c2); ++ c1 = c1 << 8 | c2; ++ } ++ ret = set_list_bits (c, c1, syntax, b, translate); ++ last_char = c1; + if (ret != REG_NOERROR) return ret; + } +@@ -1439,5 +1708,5 @@ + char str[CHAR_CLASS_MAX_LENGTH + 1]; + +- PATFETCH (c); ++ PATFETCH_RAW (c); + c1 = 0; + +@@ -1499,4 +1768,7 @@ + } + had_char_class = true; ++#ifdef DEBUG ++ last_char = -1; ++#endif + } + else +@@ -1505,7 +1777,13 @@ + while (c1--) + PATUNFETCH; ++#if 0 /* The original was: */ + SET_LIST_BIT ('['); + SET_LIST_BIT (':'); ++#else /* I think this is the right way. */ ++ SET_LIST_BIT (TRANSLATE ('[')); ++ SET_LIST_BIT (TRANSLATE (':')); ++#endif + had_char_class = false; ++ last_char = ':'; + } + } +@@ -1513,5 +1791,6 @@ + { + had_char_class = false; +- SET_LIST_BIT (c); ++ (void) set_list_bits (c, c, syntax, b, translate); ++ last_char = c; + } + } +@@ -1521,5 +1800,9 @@ + while ((int) b[-1] > 0 && b[b[-1] - 1] == 0) + b[-1]--; +- b += b[-1]; ++ if (b[-1] != (1 << BYTEWIDTH) / BYTEWIDTH) ++ bcopy (&b[(1 << BYTEWIDTH) / BYTEWIDTH], &b[b[-1]], ++ 2 + EXTRACT_UNSIGNED (&b[(1 << BYTEWIDTH) / BYTEWIDTH])*4); ++ b += b[-1] + 2 + EXTRACT_UNSIGNED (&b[b[-1]])*4; ++ break; + } + break; +@@ -1988,5 +2271,6 @@ + not to translate; but if we don't translate it + it will never match anything. */ +- c = TRANSLATE (c); ++ if (!ismbchar (c)) ++ c = TRANSLATE (c); + goto normal_char; + } +@@ -1997,4 +2281,11 @@ + /* Expects the character in `c'. */ + normal_char: ++ ++ c1 = 0; ++ if (ismbchar (c)) { ++ c1 = c; ++ PATFETCH_RAW (c); ++ } ++ + /* If no exactn currently being built. */ + if (!pending_exact +@@ -2004,5 +2295,6 @@ + + /* We have only one byte following the exactn for the count. */ +- || *pending_exact == (1 << BYTEWIDTH) - 1 ++ || *pending_exact >= (c1 ? (1 << BYTEWIDTH) - 2 ++ : (1 << BYTEWIDTH) - 1) + + /* If followed by a repetition operator. */ +@@ -2024,4 +2316,8 @@ + } + ++ if (c1) { ++ BUF_PUSH (c1); ++ (*pending_exact)++; ++ } + BUF_PUSH (c); + (*pending_exact)++; +@@ -2149,5 +2445,5 @@ + at_endline_loc_p (p, pend, syntax) + const char *p, *pend; +- int syntax; ++ reg_syntax_t syntax; + { + const char *next = p; +@@ -2185,4 +2481,5 @@ + + ++#if 0 /* We use set_list_bits() now. */ + /* Read the ending character of a range (in a bracket expression) from the + uncompiled pattern *P_PTR (which ends at PEND). We assume the +@@ -2240,4 +2537,5 @@ + return REG_NOERROR; + } ++#endif + + /* Failure stack declarations and macros; both re_compile_fastmap and +@@ -2603,18 +2901,65 @@ + + case charset: ++ /* NOTE: Charset for single-byte chars never contain ++ multi-byte char. See set_list_bits(). */ + for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) + if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) + fastmap[j] = 1; ++ { ++ unsigned short size; ++ unsigned char c, end; ++ ++ p += p[-1] + 2; ++ size = EXTRACT_UNSIGNED (&p[-2]); ++ for (j = 0; j < size; j++) ++ /* set bits for 1st bytes of multi-byte chars. */ ++ for (c = (unsigned char) p[j*4], ++ end = (unsigned char) p[j*4 + 2]; ++ c <= end; c++) ++ /* NOTE: Charset for multi-byte chars might contain ++ single-byte chars. We must reject them. */ ++ if (ismbchar (c)) ++ fastmap[c] = 1; ++ } + break; + + + case charset_not: ++ /* S: set of all single-byte chars. ++ M: set of all first bytes that can start multi-byte chars. ++ s: any set of single-byte chars. ++ m: any set of first bytes that can start multi-byte chars. ++ ++ We assume S+M = U. ++ ___ _ _ ++ s+m = (S*s+M*m). */ + /* Chars beyond end of map must be allowed. */ ++ /* NOTE: Charset_not for single-byte chars might contain ++ multi-byte chars. See set_list_bits(). */ + for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++) +- fastmap[j] = 1; ++ if (!ismbchar (j)) ++ fastmap[j] = 1; + + for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) + if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))) +- fastmap[j] = 1; ++ if (!ismbchar (j)) ++ fastmap[j] = 1; ++ { ++ unsigned short size; ++ unsigned short c, beg; ++ ++ p += p[-1] + 2; ++ size = EXTRACT_UNSIGNED (&p[-2]); ++ c = 0x00; ++ for (j = 0; j < size; j++) { ++ for (beg = (unsigned char) p[j*4 + 0]; c <= beg; c++) ++ if (ismbchar (c)) ++ fastmap[c] = 1; ++ c = (unsigned char) p[j*4 + 2]; ++ } ++ for (beg = 0xff; c <= beg; c++) ++ if (ismbchar (c)) ++ fastmap[c] = 1; ++ } + break; + +@@ -2929,4 +3274,5 @@ + register int lim = 0; + int irange = range; ++ unsigned char c; + + if (startpos < size1 && startpos + range >= size1) +@@ -2938,11 +3284,23 @@ + inside the loop. */ + if (translate) +- while (range > lim +- && !fastmap[(unsigned char) +- translate[(unsigned char) *d++]]) ++ while (range > lim) { ++ c = *d++; ++ if (ismbchar (c)) { ++ if (fastmap[c]) ++ break; ++ d++; ++ range -= 2; ++ continue; ++ } ++ if (fastmap[(unsigned char) translate[c]]) ++ break; + range--; ++ } + else +- while (range > lim && !fastmap[(unsigned char) *d++]) ++ while (range > lim && (c = *d++, !fastmap[c])) { ++ if (ismbchar (c)) ++ d++, range--; + range--; ++ } + + startpos += irange - range; +@@ -2977,11 +3335,34 @@ + else if (range > 0) + { +- range--; +- startpos++; ++ const char *d = ((startpos >= size1 ? string2 - size1 : string1) ++ + startpos); ++ ++ if (ismbchar (*d)) { ++ range--, startpos++; ++ if (!range) ++ break; ++ } ++ range--, startpos++; + } + else + { +- range++; +- startpos--; ++ range++, startpos--; ++ { ++ const char *s, *d, *p; ++ ++ if (startpos < size1) ++ s = string1, d = string1 + startpos; ++ else ++ s = string2, d = string2 + startpos - size1; ++ for (p = d; p-- > s && ismbchar(*p); ) ++ /* --p >= s $B$@$H(B 80[12]?86 $B$GF0$+$J$$2DG=@-$,$"$k(B. (huge ++ model $B0J30$G(B, s $B$N%*%U%;%C%H$,(B 0 $B$@$C$?>l9g(B.) */ ++ ; ++ if (!((d - p) & 1)) { ++ if (!range) ++ break; ++ range++, startpos--; ++ } ++ } + } + } +@@ -3539,6 +3920,19 @@ + do + { ++ unsigned char c; ++ + PREFETCH (); +- if (translate[(unsigned char) *d++] != (char) *p++) ++ c = *d++; ++ if (ismbchar (c)) { ++ if (c != (unsigned char) *p++ ++ || !--mcnt /* $B%Q%?!<%s$,@5$7$/%3%s%Q%$%k$5(B ++ $B$l$F$$$k8B$j(B, $B$3$N%A%'%C%/$O(B ++ $B>iD9$@$,G0$N$?$a(B. */ ++ || d == dend ++ || (unsigned char) *d++ != (unsigned char) *p++) ++ goto fail; ++ continue; ++ } ++ if ((unsigned char) translate[c] != (unsigned char) *p++) + goto fail; + } +@@ -3549,6 +3943,26 @@ + do + { ++#if 0 ++ /* $BB>$NItJ,$G$O(B, string1 $B$H(B string2 $B$K%^%k%A%P%$%HJ8;z(B ++ $B$,8Y$k$N$r5v$7$F$$$J$$(B. $B$3$N$3$H$rB.EY$r5>@7$K$7$F(B ++ $B$b%A%'%C%/$9$k>l9g$O(B, $B$3$3$H<!$N(B `#if 0' $B$r(B `#if 1' ++ $B$KJQ$($k$3$H(B. */ ++ unsigned char c; ++ ++#endif + PREFETCH (); ++#if 0 ++ c = *d++; ++ if (ismbchar (c)) { ++ if (c != (unsigned char) *p++ ++ || !--mcnt ++ || d == dend) ++ goto fail; ++ c = *d++; ++ } ++ if (c != (unsigned char) *p++) goto fail; ++#else + if (*d++ != (char) *p++) goto fail; ++#endif + } + while (--mcnt); +@@ -3563,4 +3977,14 @@ + + PREFETCH (); ++ if (ismbchar (*d)) { ++ if (d + 1 == dend || d[1] == '\n' || d[1] == '\0') ++ /* $BL58z$J%^%k%A%P%$%HJ8;z$K$O%^%C%A$5$;$J$$(B. $B$3$3$G$O(B, $B4J(B ++ $BC1$N$?$a#2%P%$%HL\$,(B '\n', '\0' $B$N$b$N$@$1$rL58z$H$9$k(B. */ ++ goto fail; ++ SET_REGS_MATCHED (); ++ DEBUG_PRINT2 (" Matched `%d'.\n", EXTRACT_MBC (&d[0])); ++ d += 2; ++ break; ++ } + + if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n') +@@ -3577,19 +4001,23 @@ + case charset_not: + { +- register unsigned char c; +- boolean not = (re_opcode_t) *(p - 1) == charset_not; ++ register unsigned short c; ++ boolean not; + +- DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : ""); ++ DEBUG_PRINT2 ("EXECUTING charset%s.\n", ++ (re_opcode_t) *(p - 1) == charset_not ? "_not" : ""); + + PREFETCH (); +- c = TRANSLATE (*d); /* The character to match. */ ++ c = (unsigned char) *d; ++ if (ismbchar (c)) { ++ c <<= 8; ++ if (d + 1 != dend) ++ c |= (unsigned char) d[1]; ++ } ++ else ++ c = TRANSLATE (c); /* The character to match. */ + +- /* Cast to `unsigned' instead of `unsigned char' in case the +- bit list is a full 32 bytes long. */ +- if (c < (unsigned) (*p * BYTEWIDTH) +- && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) +- not = !not; ++ not = is_in_list (c, p); + +- p += 1 + *p; ++ p += 1 + *p + 2 + EXTRACT_UNSIGNED (&p[1 + *p])*4; + + if (!not) goto fail; +@@ -3597,4 +4025,6 @@ + SET_REGS_MATCHED (); + d++; ++ if (d != dend && c >= 1 << BYTEWIDTH) ++ d++; + break; + } +@@ -3762,5 +4192,5 @@ + + /* xx why this test? */ +- if ((int) old_regend[r] >= (int) regstart[r]) ++ if (old_regend[r] >= regstart[r]) + regend[r] = old_regend[r]; + } +@@ -4013,5 +4443,5 @@ + || (bufp->newline_anchor && (re_opcode_t) *p2 == endline)) + { +- register unsigned char c ++ register unsigned short c + = *p2 == (unsigned char) endline ? '\n' : p2[2]; + p1 = p + mcnt; +@@ -4030,13 +4460,10 @@ + || (re_opcode_t) p1[3] == charset_not) + { +- int not = (re_opcode_t) p1[3] == charset_not; +- +- if (c < (unsigned char) (p1[4] * BYTEWIDTH) +- && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) +- not = !not; ++ if (ismbchar (c)) ++ c = c << 8 | p2[3]; + +- /* `not' is equal to 1 if c would match, which means ++ /* `is_in_list()' is TRUE if c would match, which means + that we can't change to pop_failure_jump. */ +- if (!not) ++ if (!is_in_list (c, p1 + 4)) + { + p[-3] = (unsigned char) pop_failure_jump; +@@ -4593,8 +5020,15 @@ + char *translate; + { +- register unsigned char *p1 = s1, *p2 = s2; ++ register unsigned char *p1 = s1, *p2 = s2, c; + while (len) + { +- if (translate[*p1++] != translate[*p2++]) return 1; ++ c = *p1++; ++ if (ismbchar(c)) { ++ if (c != *p2++ || !--len || *p1++ != *p2++) ++ return 1; ++ } ++ else ++ if (translate[c] != translate[*p2++]) ++ return 1; + len--; + } +@@ -4739,5 +5173,5 @@ + { + reg_errcode_t ret; +- unsigned syntax ++ reg_syntax_t syntax + = (cflags & REG_EXTENDED) ? + RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC; +diff -ru2N sed-1.18/regex.h sed+mb1.03/regex.h +--- sed-1.18/regex.h Sat Apr 3 08:17:33 1993 ++++ sed+mb1.03/regex.h Sat Jul 10 17:23:29 1993 +@@ -17,4 +17,6 @@ + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ++/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto) ++ Last change: Jul. 10, 1993 by t^2 */ + + #ifndef __REGEXP_LIBRARY_H__ +@@ -36,9 +38,9 @@ + the definitions shifted by one from the previous bit; thus, when we + add or remove a bit, only one other definition need change. */ +-typedef unsigned reg_syntax_t; ++typedef unsigned long reg_syntax_t; + + /* If this bit is not set, then \ inside a bracket expression is literal. + If set, then such a \ quotes the following character. */ +-#define RE_BACKSLASH_ESCAPE_IN_LISTS (1) ++#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long)1) + + /* If this bit is not set, then + and ? are operators, and \+ and \? are +@@ -206,5 +208,5 @@ + #undef RE_DUP_MAX + #endif +-#define RE_DUP_MAX ((1 << 15) - 1) ++#define RE_DUP_MAX ((int)(((unsigned)1 << 15) - 1)) + + +@@ -397,4 +399,10 @@ + + #define _RE_ARGS(args) () ++ ++#ifdef __GNUC__ ++#define const __const__ ++#else ++#define const ++#endif + + #endif /* not __STDC__ */ +diff -ru2N sed-1.18/sed.c sed+mb1.03/sed.c +--- sed-1.18/sed.c Wed Jun 2 02:10:33 1993 ++++ sed+mb1.03/sed.c Thu Jun 2 16:57:49 1994 +@@ -15,4 +15,6 @@ + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ++/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto) ++ Last change: Jun. 2, 1994 by t^2 */ + + #ifdef __STDC__ +@@ -43,4 +45,5 @@ + #include <strings.h> + #endif ++#include "mbc.h" + + #ifndef HAVE_BCOPY +@@ -69,5 +72,73 @@ + #endif + +-char *version_string = "GNU sed version 1.18"; ++#ifndef HAVE_STRNCASECMP ++static const unsigned char ++lowertab[] = { ++ 0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007, ++ 0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017, ++ 0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027, ++ 0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037, ++ 0040, '!', '"', '#', '$', '%', '&', '\'', ++ '(', ')', '*', '+', ',', '-', '.', '/', ++ '0', '1', '2', '3', '4', '5', '6', '7', ++ '8', '9', ':', ';', '<', '=', '>', '?', ++ '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', ++ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', ++ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', ++ 'x', 'y', 'z', '[', '\\', ']', '^', '_', ++ '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', ++ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', ++ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', ++ 'x', 'y', 'z', '{', '|', '}', '~', 0177, ++ 0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207, ++ 0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217, ++ 0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227, ++ 0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237, ++ 0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247, ++ 0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257, ++ 0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267, ++ 0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277, ++ 0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307, ++ 0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317, ++ 0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327, ++ 0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337, ++ 0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347, ++ 0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357, ++ 0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367, ++ 0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377 ++}; ++ ++static int ++strcasecmp(s1, s2) ++ char *s1, *s2; ++{ ++ int c1; ++ ++ do { ++ if (!(c1 = (unsigned char)lowertab[(unsigned char)*s1++])) ++ return !*s2 ? 0 : -1; ++ } while (!(c1 -= (unsigned char)lowertab[(unsigned char)*s2++])); ++ return c1; ++} ++ ++static int ++strncasecmp(s1, s2, n) ++ char *s1, *s2; ++ int n; ++{ ++ int c1; ++ ++ while (n--) { ++ if (!(c1 = (unsigned char)lowertab[(unsigned char)*s1++])) ++ return !*s2 ? 0 : -1; ++ if ((c1 -= (unsigned char)lowertab[(unsigned char)*s2++])) ++ return c1; ++ } ++ return 0; ++} ++#endif ++ ++char *version_string = "GNU sed version 1.18\ ++ + multi-byte extension 1.03"; + + /* Struct vector is used to describe a chunk of a compiled sed program. +@@ -185,5 +256,10 @@ + + /* This for the y command */ +- unsigned char *translate; ++ struct ++ { ++ unsigned short *translate; ++ unsigned short mbcsize; ++ } ++ cmd_y; + + /* For { */ +@@ -239,9 +315,10 @@ + void add_buffer P_ ((VOID * bb, char *p, int n)); + void add1_buffer P_ ((VOID * bb, int ch)); ++void add2_buffer P_ ((VOID * bb, int ch)); + char *get_buffer P_ ((VOID * bb)); + + void compile_string P_ ((char *str)); + void compile_file P_ ((char *str)); +-struct vector *compile_program P_ ((struct vector * vector, int)); ++struct vector *compile_program P_ ((struct vector * vector, int open_line)); + void bad_prog P_ ((char *why)); + int inchar P_ ((void)); +@@ -349,4 +426,5 @@ + static char NO_REGEX[] = "No previous regular expression"; + static char NO_COMMAND[] = "Missing command"; ++static char BAD_MBC[] = "Multi-byte char incomplete"; + + static struct option longopts[] = +@@ -358,4 +436,5 @@ + {"version", 0, NULL, 'V'}, + {"help", 0, NULL, 'h'}, ++ {"ctype", 1, NULL, 'T'}, + {NULL, 0, NULL, 0} + }; +@@ -374,6 +453,19 @@ + re_set_syntax (RE_SYNTAX_POSIX_BASIC); + ++#ifdef MSDOS ++ { ++ char *p, *q, c; ++ static char argv0[8 + 1]; ++ ++ for (q = p = argv[0]; (c = *p++); ) ++ if (c == '/' || c == '\\' || c == ':') ++ q = p; ++ for (p = argv0; p < &argv0[8] && (c = *q++) && c != '.'; ) ++ *p++ = tolower((unsigned char)c); ++ argv[0] = argv0; ++ } ++#endif + myname = argv[0]; +- while ((opt = getopt_long (argc, argv, "hne:f:V", longopts, (int *) 0)) ++ while ((opt = getopt_long (argc, argv, "hne:f:VW:", longopts, (int *) 0)) + != EOF) + { +@@ -408,4 +500,24 @@ + usage (0); + break; ++ case 'W': ++ if (strncasecmp(optarg, "ctype=", 6) != 0) ++ usage (4); ++ optarg += 6; ++ /*FALLDOWN*/ ++ case 'T': ++ if (strcasecmp(optarg, "ASCII") == 0) { ++ mbcinit(MBCTYPE_ASCII); ++ break; ++ } ++ if (strcasecmp(optarg, "EUC") == 0) { ++ mbcinit(MBCTYPE_EUC); ++ break; ++ } ++ if (strcasecmp(optarg, "SJIS") == 0) { ++ mbcinit(MBCTYPE_SJIS); ++ break; ++ } ++ fprintf (stderr, "%s: unknown ctype\n", optarg); ++ /*FALLDOWN*/ + default: + usage (4); +@@ -526,4 +638,23 @@ + #define MORE_CMDS 40 + ++static int ++#ifdef __STDC__ ++compare_mbcs(const void *p1, const void *p2) ++#else ++compare_mbcs(p1, p2) ++ /* The `const' keyword is #defined in regex.h. */ ++ const void *p1, *p2; ++#endif ++{ ++ unsigned short c1 = *(const unsigned short *)p1; ++ unsigned short c2 = *(const unsigned short *)p2; ++ ++ if (c1 == c2) ++ return (p1 == p2 ? 0 ++ /* qsort() $B$,0BDj$K$J$k$h$&$K(B, $BBg>.4X78$r6/@)$9$k(B. */ ++ : p1 < p2 ? -1 : 1); ++ return c1 < c2 ? -1 : 1; ++} ++ + /* Read a program (or a subprogram within '{' '}' pairs) in and store + the compiled form in *'vector' Return a pointer to the new vector. */ +@@ -828,22 +959,42 @@ + case 'y': + cur_cmd->cmd = ch; +- string = (unsigned char *) ck_malloc (256); +- for (num = 0; num < 256; num++) +- string[num] = num; +- b = init_buffer (); +- slash = inchar (); +- while ((ch = inchar ()) != EOF && ch != slash) +- add1_buffer (b, ch); +- cur_cmd->x.translate = string; +- string = (unsigned char *) get_buffer (b); +- for (num = size_buffer (b); num; --num) +- { +- ch = inchar (); +- if (ch == EOF) +- bad_prog (BAD_EOF); +- if (ch == slash) +- bad_prog ("strings for y command are different lengths"); +- cur_cmd->x.translate[*string++] = ch; ++ { ++ unsigned short *q; ++ unsigned char *p; ++ int i, n; ++ ++ b = init_buffer (); ++ n = 0; /* count multi-byte chars. */ ++ slash = inchar (); ++ while ((ch = inchar ()) != EOF && ch != slash) { ++ if ((unsigned short)ch >= 256) ++ n++; ++ add2_buffer (b, ch); + } ++ q = (unsigned short *) ck_malloc (512 + n*2*sizeof (unsigned short)); ++ cur_cmd->x.cmd_y.translate = q; ++ cur_cmd->x.cmd_y.mbcsize = n; ++ for (num = 0; num < 256; num++) ++ q[num] = num; ++ p = (unsigned char *) get_buffer (b); ++ for (i = 256, num = size_buffer (b) >> 1; num; --num) ++ { ++ unsigned char c; ++ ++ ch = inchar (); ++ if (ch == EOF) ++ bad_prog (BAD_EOF); ++ if (ch == slash) ++ bad_prog ("strings for y command are different lengths"); ++ c = *p++; ++ if (!c) ++ q[*p++] = ch; ++ else ++ q[i++] = c << 8 | *p++, ++ q[i++] = ch; ++ } ++ if (n) ++ qsort(&q[256], n, 2*sizeof (unsigned short), compare_mbcs); ++ } + flush_buffer (b); + if (inchar () != slash || ((ch = inchar ()) != EOF && ch != '\n' && ch != ';')) +@@ -880,5 +1031,5 @@ + be meaningful. */ + int +-inchar () ++inchar_raw () + { + int ch; +@@ -907,4 +1058,25 @@ + } + ++int saved_char = EOF; ++ ++int ++inchar () ++{ ++ int c, c2; ++ ++ if (saved_char != EOF) { ++ c = saved_char; ++ saved_char = EOF; ++ return c; ++ } ++ c = inchar_raw (); ++ if (c == EOF || !ismbchar (c)) ++ return c; ++ c2 = inchar_raw (); ++ if (c2 == EOF || c2 == '\n' || c2 == '\0') ++ bad_prog (BAD_MBC); ++ return c << 8 | (unsigned char) c2; ++} ++ + /* unget 'ch' so the next call to inchar will return it. 'ch' must not be + EOF or anything nasty like that. */ +@@ -913,4 +1085,8 @@ + int ch; + { ++ if (ch >= 256) { ++ saved_char = ch; ++ return; ++ } + if (ch == EOF) + return; +@@ -1178,7 +1354,9 @@ + if (input_file == 0) + { ++#ifndef MSDOS + extern int errno; + extern char *sys_errlist[]; + extern int sys_nerr; ++#endif + + char *ptr; +@@ -1405,9 +1583,21 @@ + width += 2; + } +- else if (isprint (*tmp)) ++ else if (isprint ((unsigned char)*tmp) ++ || (current_mbctype == MBCTYPE_SJIS ++ && '\240' <= *tmp && *tmp <= '\337')) + { + putchar (*tmp); + width++; + } ++ else if (ismbchar (tmp[0]) && n >= 2 ++ && tmp[1] != '\n' && tmp[1] != '\0') ++ { ++ putchar (tmp[0]); ++ putchar (tmp[1]); ++ if (!(current_mbctype == MBCTYPE_EUC && tmp[0] == '\216')) ++ width++; ++ width++; ++ --n; ++ } + else + switch (*tmp) +@@ -1663,9 +1853,61 @@ + + case 'y': +- { ++ if (current_mbctype == MBCTYPE_ASCII) { + unsigned char *p, *e; + + for (p = (unsigned char *) (line.text), e = p + line.length; p < e; p++) +- *p = cur_cmd->x.translate[*p]; ++ *p = cur_cmd->x.cmd_y.translate[*p]; ++ } ++ else { ++ unsigned char *p, *e; ++ int i = 0, j, k; ++ unsigned short c; ++ ++ if (!tmp.alloc) { ++ tmp.alloc = line.length + 1; ++ if (tmp.alloc < 50) ++ tmp.alloc = 50; ++ tmp.text = ck_malloc (tmp.alloc); ++ } ++ for (p = (unsigned char *) (line.text), e = p + line.length; p < e; ) { ++ if (i + 2 > tmp.alloc) { ++ tmp.alloc *= 2; ++ tmp.text = ck_realloc (tmp.text, tmp.alloc); ++ } ++ c = *p++; ++ if (!ismbchar (c)) ++ c = cur_cmd->x.cmd_y.translate[c]; ++ else { ++ c = c << 8 | *p++; ++ /* $BF1$8%-!<$K$D$$$F$O:G8e$N$b$N$,M-8z$K$J$k$h$&$K(B, $B?5=E(B ++ $B$KC5:w$9$k(B. */ ++ /* $B$^$:(B, c < cur_cmd->x.cmd_y.translate[256 + j*2] $B$rK~(B ++ $B$?$9(B j $B$N:G>.CM$r5a$a$k(B. */ ++ for (j = 0, k = cur_cmd->x.cmd_y.mbcsize; j < k; ) { ++ int m = (j + k) >> 1; ++ ++ if (c >= cur_cmd->x.cmd_y.translate[256 + m*2]) ++ j = m + 1; ++ else ++ k = m; ++ } ++ if (0 < j ++ && c == cur_cmd->x.cmd_y.translate[256 + (j - 1)*2]) ++ /* $BD>A0$N%-!<$,0lCW$9$l$P(B, $BJQ49$9$k(B. */ ++ c = cur_cmd->x.cmd_y.translate[256 + (j - 1)*2 + 1]; ++ } ++ if (c >= 256) ++ tmp.text[i++] = c >> 8; ++ tmp.text[i++] = c; ++ } ++ t.text = line.text; ++ t.length = line.length; ++ t.alloc = line.alloc; ++ line.text = tmp.text; ++ line.length = i; ++ line.alloc = tmp.alloc; ++ tmp.text = t.text; ++ tmp.length = t.length; ++ tmp.alloc = t.alloc; + } + break; +@@ -1871,5 +2113,6 @@ + { + fprintf (status ? stderr : stdout, "\ +-Usage: %s [-nV] [--quiet] [--silent] [--version] [-e script]\n\ ++Usage: %s [-nV] [--quiet] [--silent] [--version]\n\ ++ [-Wctype=...] [--ctype=...] [-e script]\n\ + [-f script-file] [--expression=script] [--file=script-file] [file...]\n", + myname); +diff -ru2N sed-1.18/utils.c sed+mb1.03/utils.c +--- sed-1.18/utils.c Tue May 18 06:28:49 1993 ++++ sed+mb1.03/utils.c Fri Jul 2 11:19:13 1993 +@@ -15,4 +15,6 @@ + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ++/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto) ++ Last change: Jul. 2, 1993 by t^2 */ + + /* These routines were written as part of a library (by hack), but since most +@@ -298,10 +300,29 @@ + + b=(struct buffer *)bb; +- if(b->length+1>b->allocated) { ++ if(b->length+2>b->allocated) { + b->allocated*=2; + b->b=(char *)ck_realloc(b->b,b->allocated); + } ++ if ((unsigned short)ch >= 256) ++ b->b[b->length++] = ch >> 8; + b->b[b->length]=ch; + b->length++; ++} ++ ++void ++add2_buffer(bb,ch) ++VOID *bb; ++int ch; ++{ ++ struct buffer *b; ++ ++ b=(struct buffer *)bb; ++ if(b->length+2>b->allocated) { ++ b->allocated*=2; ++ b->b=(char *)ck_realloc(b->b,b->allocated); ++ } ++ b->b[b->length]=ch >> 8; ++ b->b[b->length + 1] = ch; ++ b->length += 2; + } + diff --git a/japanese/sed/patches/patch-ab b/japanese/sed/patches/patch-ab new file mode 100644 index 00000000000..0d6274c8075 --- /dev/null +++ b/japanese/sed/patches/patch-ab @@ -0,0 +1,25 @@ +--- sed-1.18/sed.c-orig Sun Apr 2 19:54:56 1995 ++++ sed-1.18/sed.c Sun Apr 2 20:00:14 1995 +@@ -1355,7 +1355,9 @@ + { + #ifndef MSDOS + extern int errno; ++#if !defined(__FreeBSD__) && !defined(__NetBSD__) + extern char *sys_errlist[]; ++#endif + extern int sys_nerr; + #endif + +--- sed-1.18/Makefile.in-orig Sun Apr 2 20:09:30 1995 ++++ sed-1.18/Makefile.in Sun Apr 2 20:17:14 1995 +@@ -50,8 +50,8 @@ + + LIBS = @LIBS@ + +-CFLAGS = -g -DREGEX_MALLOC=1 +-LDFLAGS = -g ++CFLAGS = -O -DREGEX_MALLOC=1 ++LDFLAGS = + extra_objs =@ALLOCA@ + + prefix = /usr/local diff --git a/japanese/sed/pkg/COMMENT b/japanese/sed/pkg/COMMENT new file mode 100644 index 00000000000..b201c7c92a8 --- /dev/null +++ b/japanese/sed/pkg/COMMENT @@ -0,0 +1 @@ +GNU sed + multi-byte extension. diff --git a/japanese/sed/pkg/DESCR b/japanese/sed/pkg/DESCR new file mode 100644 index 00000000000..b4e617d6afd --- /dev/null +++ b/japanese/sed/pkg/DESCR @@ -0,0 +1,5 @@ +This package is a multi-byte extented GNU SED. It accepts text which +includes multi-byte character code. Supported multi-byte codes are +2 byte EUC code and/or Shift-JIS code. + +Multi-byte patch by t^2(Takahiro Tanimoto, NBC02362@niftyserve.or.jp). diff --git a/japanese/sed/pkg/PLIST b/japanese/sed/pkg/PLIST new file mode 100644 index 00000000000..e0ccd0b17c5 --- /dev/null +++ b/japanese/sed/pkg/PLIST @@ -0,0 +1 @@ +bin/sed |