3 \e$B!|!|!|!|!|
\e(B GNU grep version 2.0 + multi-byte extension 1.04
\e$B!|!|!|!|!|
\e(B
4 \e$B!|!|!|!|!|
\e(B Jun. 2, 1994 by t^2
\e$B!|!|!|!|!|
\e(B
6 \e$B$3$N%U%!%$%k$O
\e(B GNU grep version 2.0 (grep-2.0)
\e$B$N%=!<%9%3!<%I$+$i
\e(B,
\e$B$=
\e(B
7 \e$B$N%^%k%A%P%$%HJ8;zBP1~HG
\e(B grep-2.0+mb1.04
\e$B$N%=!<%9%3!<%I$r@8@.$9$k$?$a
\e(B
8 \e$B$N:9J,$r4^$s$G$$$^$9
\e(B. grep-2.0
\e$B$N%=!<%9$rE83+$7$F$"$k%G%#%l%/%H%j$G
\e(B
10 % patch -p1 <
\e$B$3$N%U%!%$%k
\e(B
12 \e$B$J$I$H$7$F%Q%C%A$rEv$F$F$/$@$5$$
\e(B.
\e$B$=$N8e
\e(B README.MB
\e$B$rFI$s$G$/$@$5$$
\e(B.
14 \e$B")
\e(B810
\e$BJ!2,;TCf1{6hG_8w1`CDCO
\e(B 7-207
15 TEL/FAX: 092-731-4025 (TEL/FAX
\e$B<+F0@ZBX$(
\e(B)
16 092-724-6342 (TEL
\e$B$N$_
\e(B)
17 E-mail: NBC02362@niftyserve.or.jp t^2 (
\e$BC+K\9'9@
\e(B)
19 diff -ru2N grep-2.0/ChangeLog.MB grep+mb1.04/ChangeLog.MB
20 --- grep-2.0/ChangeLog.MB Thu Jan 1 09:00:00 1970
21 +++ grep+mb1.04/ChangeLog.MB Thu Jun 2 17:01:42 1994
23 +Thu Jun 2 16:58:03 1994 Takahiro Tanimoto (tt@isaac)
25 + * Version 2.0 + multi-byte extension 1.04 released.
27 +Sat Mar 5 16:30:16 1994 Takahiro Tanimoto (tt@isaac)
29 + * README.MSC: PC-9800
\e$B%7%j!<%:MQ
\e(B MS-C 6.00A
\e$B$N
\e(B,
\e$B%o%$%k%I%+!<%IE8
\e(B
30 +
\e$B3+%k!<%A%s$N%P%0$KBP=h$7$?
\e(B.
\e$B0JA0$N
\e(B stdargv.diff
\e$B$r$3$l$KE}9g$7
\e(B,
31 +
\e$B:o=|$7$?
\e(B. (Thanks to
\e$BJ!9@K.$5$s
\e(B <GFE00522@niftyserve.or.jp>)
33 +Thu Aug 19 04:26:09 1993 Takahiro Tanimoto (tt@isaac)
35 + * regex.c (re_compile_fastmap): charset_not
\e$B$N
\e(B fastmap
\e$B$N:n@.=h
\e(B
36 +
\e$BM}$,4V0c$C$F$$$F
\e(B, regex
\e$B$N
\e(B fastmap
\e$B$r;HMQ$9$k>l9g
\e(B (e?grep
\e$B$G$O
\e(B
37 + fastmap
\e$B$r;HMQ$7$F$$$J$$$?$a
\e(B,
\e$B$3$NLdBj$OI=LL$K$O8=$l$J$$
\e(B),
\e$B@55,
\e(B
38 +
\e$BI=8=$N@hF,$N
\e(B [^
\e$B#A
\e(B]
\e$B$d
\e(B [^a]
\e$B$KNc$($P
\e(B
\e$B#B
\e(B
\e$B$,%^%C%A$7$J$+$C$?
\e(B.
39 + (Thanks to
\e$B>.20NIM4$5$s
\e(B <JAE03716@niftyserve.or.jp>)
41 +Tue Aug 10 01:29:05 1993 Takahiro Tanimoto (tt@isaac)
43 + * regex.c (set_list_bits):
\e$BJ8;z%/%i%9Cf$N%^%k%A%P%$%HJ8;z$N:GE,
\e(B
44 +
\e$B2=$G
\e(B,
\e$B6h4V=*E@$N99?7=hM}ItJ,$K%P%0$,$"$j
\e(B, [
\e$B#A
\e(B-
\e$B#C#E
\e(B-
\e$B#G#B
\e(B-
\e$B#D
\e(B]
\e$B$r:G
\e(B
45 +
\e$BE,2=$9$k$H
\e(B [
\e$B#A
\e(B-
\e$B#G
\e(B]
\e$B$@$,
\e(B,
\e$B$3$l$,
\e(B [
\e$B#A
\e(B-
\e$B#E
\e(B]
\e$B$H$J$C$F$7$^$C$F$$$?
\e(B.
46 +
\e$B$?$@$7
\e(B, regex
\e$B$G$O$J$/
\e(B dfa
\e$B$,;HMQ$5$l$k>l9g$K$O$3$N%P%0$OI=LL$K
\e(B
49 +Fri Jul 23 03:22:13 1993 Takahiro Tanimoto (tt@isaac)
51 + * Version 2.0 + multi-byte extension 1.03 released.
53 + * DEFS.dos: strcmpi
\e$B$r
\e(B stricmp
\e$B$KJQ99
\e(B.
55 + * grep.c (main): MS-DOS
\e$B$N>l9g
\e(B, argv[0]
\e$B$r2C9)$7$?J8;zNs$X$N%]%$
\e(B
56 +
\e$B%s%?$r
\e(B argv[0]
\e$B$X$b%;%C%H$9$k
\e(B. getopt
\e$B$,=PNO$9$k%a%C%;!<%8$b2C
\e(B
57 +
\e$B9)$5$l$?J8;zNs$H$J$k
\e(B.
59 + * grep.c (main): MS-C 6.00A
\e$B$N
\e(B stdargv.asm
\e$B$N%P%0$r%U%#%C%/%9$7
\e(B
60 +
\e$B$?$?$a
\e(B, argv[0] == ""
\e$B$N$H$-$N=hM}$r:o=|$7$?
\e(B.
62 + * stdargv.diff:
\e$BDI2C
\e(B.
64 +Tue Jul 13 07:04:13 1993 Takahiro Tanimoto (tt@isaac)
66 + * Version 2.0 + multi-byte extension 1.02 released.
68 +Mon Jul 12 00:20:36 1993 Takahiro Tanimoto (tt@isaac)
70 + * grep.c: HAVE_STRCASECMP
\e$B$,
\e(B #define
\e$B$5$l$F$$$J$$$H$-
\e(B,
\e$B0lJ}$NJ8
\e(B
71 +
\e$B;zNs$@$1$r>.J8;z$K$7$F$+$iHf3S$9$k4X?t$rDj5A$7$F$$$?$,
\e(B,
\e$B;H$$J}$,
\e(B
72 +
\e$B0-$+$C$?
\e(B.
\e$B$=$l$r
\e(B strcasecmp()
\e$B$HF1$8$b$N$KJQ99$7$?
\e(B.
74 + * DEFS.dos: HAVE_STRCMPI
\e$B$r
\e(B #define
\e$B$9$kBe$o$j$K
\e(B,
75 + HAVE_STRCASECMP
\e$B$r
\e(B #define
\e$B$7
\e(B, strcasecmp
\e$B$r
\e(B strcmpi
\e$B$K
\e(B #define
78 +Sat Jul 10 01:05:04 1993 Takahiro Tanimoto (tt@isaac)
80 + * Version 2.0 + multi-byte extension 1.01 released.
82 + * grep.c (main): MSDOS
\e$B$N>l9g
\e(B, argv[0]
\e$B$r>.J8;z$K$7$F
\e(B prog
\e$B$K%;%C
\e(B
83 +
\e$B%H$9$k
\e(B.
\e$B$^$?
\e(B,
\e$B3HD%;R$O<h$j=|$/
\e(B.
85 + * obstack.h: chunk_size
\e$B$N7?$r
\e(B size_t
\e$B$+$i
\e(B unsigned
\e$B$KJQ99
\e(B.
86 + old-C
\e$B$N>l9g
\e(B, size_t
\e$B$,Dj5A$5$l$F$$$J$$>uBV$H$J$C$?$?$a
\e(B.
88 + * regex.h:
\e$BDj?t$N8e$K
\e(B U, UL
\e$B$r$D$1$k$H
\e(B old-C
\e$B$G%3%s%Q%$%k$G$-$J
\e(B
89 +
\e$B$$
\e(B.
\e$B$3$l$i$r%-%c%9%H$KJQ99$7$?
\e(B.
91 + * regex.h: RE_DUP_MAX
\e$B$NDj5A$r
\e(B 16
\e$B%S%C%H
\e(B int
\e$B$N%^%7%s$G$b%*!<%P
\e(B
92 +
\e$B%U%m!<$7$J$$=q$-J}$K=$@5
\e(B.
94 + * obstack.h: struct obstack
\e$B$N%a%s%P
\e(B chunk_size
\e$B$N7?$r
\e(B size_t
\e$B$H
\e(B
95 +
\e$B$7$?
\e(B. PTR_INT_TYPE
\e$B$r30It$+$i
\e(B #define
\e$B$G$-$k$h$&$K$7$?
\e(B. MSDOS
96 +
\e$B$G
\e(B SMALL MODEL
\e$B0J30$N>l9g
\e(B, __PTR_TO_INT, __INT_TO_PTR
\e$B$H$H$b$K
\e(B,
97 +
\e$B%]%$%s%?$H
\e(B long
\e$B$rJQ49$9$k$h$&$K$7$?
\e(B.
99 + * grep.c (fillbuf, grep): read()
\e$B$NJV$jCM$N@5Ii$K$h$k%(%i!<%A%'%C
\e(B
100 +
\e$B%/$r
\e(B, -1
\e$B$KEy$7$$$+$I$&$+$G9T$&$h$&$KJQ99
\e(B.
102 + * grep.c: totalcc, totalnl
\e$B$r
\e(B unsigned long
\e$B$KJQ99$7
\e(B, prline()
103 +
\e$BCf$N
\e(B printf()
\e$B$N=q<0$r9g$o$;$?
\e(B.
105 + * DEFS.dos: BUFSALLOC
\e$B$r
\e(B 4096
\e$B$K
\e(B #define. (See reset() in
108 + * getpagesize.h: MSDOS
\e$B$N>l9g
\e(B,
\e$B%Z!<%8%5%$%:$O
\e(B 4096
\e$B$H$7$?
\e(B.
110 + * dfa.c: STDC_HEADERS
\e$B$^$?$O
\e(B HAVE_STRING_H
\e$B$N$H$-
\e(B, bcopy, bzero
111 +
\e$B$r%^%/%mE83+$9$k
\e(B.
113 +Fri Jul 9 13:16:50 1993 Takahiro Tanimoto (tt@isaac)
115 + * mbc.c, mbc.h, ...: ismbchar()
\e$B$r%b%8%e!<%kKh$KFHN)$7$FDj5A$9$k
\e(B
116 +
\e$B$N$r$d$a
\e(B,
\e$B%b%8%e!<%k$rDI2C$7$?
\e(B.
118 + * search.c (Fexecute): fgrep
\e$B$r%^%k%A%P%$%HJ8;z$KBP1~$5$;$?
\e(B.
120 +Wed Jul 7 17:02:33 1993 Takahiro Tanimoto (tt@isaac)
122 + * kwset.c (bmexec): 8
\e$B%S%C%H%/%j!<%s$G$J$$$H$3$m$r=$@5
\e(B.
124 + *
\e$B%Y!<%9$r
\e(B grep-2.0
\e$B$XJQ99
\e(B.
126 +Sun Jul 4 08:48:12 1993 Takahiro Tanimoto (tt@isaac)
128 + * regex.c (re_match_2):
\e$B%*%j%8%J%k$N%P%0
\e(B. maybe_finalize_jump
129 +
\e$B$N=hM}Cf
\e(B, start_memory/stop_memory
\e$B$r%9%-%C%W$9$k$H$3$m$G
\e(B,
\e$B0z?t
\e(B
130 +
\e$B$N%9%-%C%W$r$7$F$$$J$$%P%0$r=$@5
\e(B.
\e$BNc$($P
\e(B "([a-n]+).*\1"
\e$B$,@5$7
\e(B
131 +
\e$B$/
\e(B "abcxyzab"
\e$B$K%^%C%A$9$k$h$&$K$J$C$?
\e(B.
133 +Sat Jul 3 06:51:33 1993 Takahiro Tanimoto (tt@isaac)
135 + * Version 1.6 + multi-byte extension 1.00 released.
137 +Sat Jul 3 04:29:14 1993 Takahiro Tanimoto (tt at pc98)
139 + * grep.c (bufprev): -b
\e$B%*%W%7%g%s$GI=<($9$k%P%$%H%*%U%;%C%H$r
\e(B
140 + long
\e$B$K$9$k$?$a$K
\e(B bufprev
\e$B$r
\e(B long
\e$B$H$7$?
\e(B. bufprev
\e$B0J30$OJQ99$7
\e(B
141 +
\e$B$F$$$J$$$?$a
\e(B, 1
\e$B9T$N%5%$%:$,
\e(B int
\e$B$NHO0O$r1[$($k$H@5$7$/=hM}$5$l
\e(B
142 +
\e$B$J$$
\e(B.
\e$B$^$?
\e(B, DOS
\e$B$G$O
\e(B CR+LF
\e$B$r
\e(B 1
\e$B%P%$%H$H$7$F%+%&%s%H$7$F$7$^$&
\e(B.
145 + * regex.c (re_match_2):
\e$BJ8;z%/%i%9$N=hM}Cf$N
\e(B 16
\e$B%S%C%H
\e(B int
\e$B$G@5
\e(B
146 +
\e$B>oF0:n$7$J$$ItJ,$r=$@5
\e(B.
148 + * regex.c (re_exec): re_search()
\e$B$X$N:G8e$N0z?t$r
\e(B 0
\e$B$+$i
\e(B NULL
\e$B$X
\e(B
151 + * regex.c (re_match): re_match_2()
\e$B$X$N#2HVL\$N0z?t$r
\e(B 0
\e$B$+$i
\e(B
152 + NULL
\e$B$X=$@5
\e(B.
154 + * regex.c (re_search): re_search_2()
\e$B$X$N#2HVL\$N0z?t$r
\e(B 0
\e$B$+$i
\e(B
155 + NULL
\e$B$X=$@5
\e(B.
157 + * grep.c (main): MS-C
\e$B$N
\e(B setargv
\e$B$N%P%0$N$;$$$G
\e(B, grep "\\" foo
158 +
\e$B$H$9$k$H
\e(B argv[0] == ""
\e$B$H$J$C$F$7$^$&
\e(B. argv[0] == ""
\e$B$N$H$-$O6/
\e(B
159 +
\e$B@)E*$K
\e(B "grep"
\e$B$^$?$O
\e(B "egrep"
\e$B$r%;%C%H$9$k$h$&$K$7$?
\e(B.
161 +Fri Jul 2 19:25:58 1993 Takahiro Tanimoto (tt at pc98)
163 + * grep.c (main):
\e$BJQ?t
\e(B prog
\e$B$N@_Dj$r
\e(B DOS
\e$BMQ$K=$@5$7$?
\e(B.
\e$B$=$N:]
\e(B,
164 +
\e$B%*%j%8%J%k$N$d$jJ}$O$^$:$+$C$?$N$G=$@5$7$?
\e(B.
166 + * grep.c: MSDOS
\e$B$N$H$-
\e(B errno
\e$B$H
\e(B sys_errlist
\e$B$N@k8@$r$7$J$$$h$&$K
\e(B
169 + * regex.c (set_list_bits):
\e$B;HMQ$7$F$$$J$+$C$?JQ?t$r:o=|
\e(B.
171 + * Makefile.msc: DOS
\e$B%5%]!<%H$N$?$aDI2C
\e(B.
173 +Fri Jun 11 04:14:22 1993 Takahiro Tanimoto (tt@isaac)
175 + * grep.c: version
\e$BJ8;zNs$,8E$$$^$^$@$C$?
\e(B.
177 +Tue May 25 00:10:49 1993 Takahiro Tanimoto (tt@isaac)
179 + * Version 1.6 + multi-byte extension 0.02 released.
181 +Mon May 24 15:57:31 1993 Takahiro Tanimoto (tt@isaac)
183 + * regex.c (re_search_2):
\e$B8eJ}$X
\e(B advance
\e$B$9$k:]$N%P%0$r=$@5
\e(B.
185 +Sat May 22 02:03:41 1993 Takahiro Tanimoto (tt@isaac)
187 + * regex.c (re_compile_fastmap): exactn
\e$B$G
\e(B translate
\e$B$9$k$N$r$d$a
\e(B
188 +
\e$B$?
\e(B. re_compile_pattern
\e$B$G0lEY
\e(B translate
\e$B$5$l$F$$$k$O$:
\e(B.
190 + * regex.c (re_match_2): exactn
\e$B$N=hM}ItJ,$G
\e(B, #if 0
\e$B$r
\e(B #if 1
\e$B$K$7
\e(B
191 +
\e$B$?>l9g
\e(B,
\e$B@5$7$$=hM}$r9T$C$F$$$J$+$C$?$N$r=$@5
\e(B.
193 +Fri May 21 20:04:07 1993 Takahiro Tanimoto (tt@isaac)
195 + * regex.[ch]: mbcharset, mbcharset_not
\e$B$rGQ;_
\e(B.
\e$BBe$o$j$K
\e(B
196 + charset, charset_not
\e$B$,%^%k%A%P%$%HJ8;z$r$bJ];}$9$k
\e(B.
198 + * grep.c (main):
\e$B2<5-$NJQ99$KH<$C$F
\e(B, "^.*(" ... ")"
\e$B$rIU2C$9$k=h
\e(B
199 +
\e$BM}$r:o=|$7$?
\e(B.
201 + * dfa.c (regcompile): searchflag
\e$B$,
\e(B ON
\e$B$N$H$-
\e(B,
\e$B@55,I=8=$r
\e(B "^.*("
202 + ... ")"
\e$B$H$7$F%3%s%Q%$%k$9$k$h$&$K$7$?
\e(B.
\e$B0JA0$O
\e(B grep.c
\e$B$NCf$GF1
\e(B
203 +
\e$B$8$3$H$r9T$C$F$$$?
\e(B.
205 + * dfa.c (lex):
\e$BJ8;z%/%i%9$G%^%k%A%P%$%HJ8;z$N#1J8;zL\$N=89g$+$i
\e(B,
206 +
\e$B%7%s%0%k%P%$%HJ8;z$r=|30$9$k=hM}$rDI2C$7$?
\e(B.
208 + * dfa.c (lex):
\e$BJ8;z%/%i%9$G%7%s%0%k%P%$%HJ8;z$N>e8B$,4V0c$C$F$$
\e(B
209 +
\e$B$?$N$r=$@5$7$?
\e(B.
211 +Wed May 19 01:27:07 1993 Takahiro Tanimoto (tt@isaac)
213 + * regex.c: !__STDC__
\e$B$N$H$-$K
\e(B const
\e$B$r
\e(B #define.
215 + * dfa.h:
\e$B%*%j%8%J%k$G$O
\e(B !STDC_HEADERS
\e$B$N$H$-$K
\e(B const
\e$B$r
\e(B #define
216 +
\e$B$7$F$$$?$,
\e(B,
\e$B$3$l$r
\e(B !__STDC__
\e$B$N$H$-$K
\e(B #define
\e$B$9$k$h$&$KJQ99$7$?
\e(B.
218 + * configure.in: bcopy(), memmove()
\e$B$N%A%'%C%/$rDI2C
\e(B.
220 + * dfa.c (reginit): cs_tok[]
\e$B$N=i4|2=$rDI2C$7$?
\e(B. -i
\e$B%U%i%0$rIU$1
\e(B
221 +
\e$B$?>l9g$NIT6q9g$r=$@5
\e(B.
223 +Tue May 18 18:14:04 1993 Takahiro Tanimoto (tt@albert)
225 + * dfa.h: regex.h
\e$B$G$N
\e(B RE_MBCTYPE_???
\e$B$NCM$H0lCW$5$;$?
\e(B.
227 + * regex.[ch] (RE_TRANSLATED_RANGE): mbsed-0.01
\e$B$G9T$C$?3HD%$rM"
\e(B
230 +Sat May 15 04:27:32 1993 Takahiro Tanimoto (tt@isaac)
232 + *
\e$B%^%k%A%P%$%HJ8;zBP1~HG$,0lDL$j40@.$7$?
\e(B.
240 +version-control: never
242 diff -ru2N grep-2.0/DEFS.dos grep+mb1.04/DEFS.dos
243 --- grep-2.0/DEFS.dos Thu Jan 1 09:00:00 1970
244 +++ grep+mb1.04/DEFS.dos Fri Jul 23 03:23:31 1993
246 +#define STDC_HEADERS 1
247 +#define HAVE_STRING_H 1
248 +#define HAVE_MEMCHR 1
249 +#define HAVE_STRERROR 1
250 +#define HAVE_MEMMOVE 1
251 +#define HAVE_STRCASECMP 1
252 +#define strcasecmp stricmp
254 +#define BUFSALLOC 4096
257 +#define __PTR_TO_INT(P) ((long)(P))
258 +#define __INT_TO_PTR(P) ((char *)(P))
259 +#define PTR_INT_TYPE long
261 diff -ru2N grep-2.0/MANIFEST.MB grep+mb1.04/MANIFEST.MB
262 --- grep-2.0/MANIFEST.MB Thu Jan 1 09:00:00 1970
263 +++ grep+mb1.04/MANIFEST.MB Sat Mar 5 16:37:46 1994
265 +ChangeLog.MB Revision history of multi-byte extension to grep.
266 +DEFS.dos Definitions for DOS.
267 +MANIFEST.MB This file.
268 +Makefile.msc Makefile for MS-C version 6.
269 +README.MB Documentation for multi-byte extension.
270 +README.MSC Patch for source/startup/... of MS-C 6.00A
271 +mbc.c Multi-byte char handler.
272 +mbc.h Interface to mbc.c.
273 +tests/batgen.awk DOS version of scriptgen.awk.
274 +tests/check.bat DOS version of check.sh
275 +tests/spencer.dos Input for batgen.
276 diff -ru2N grep-2.0/Makefile.in grep+mb1.04/Makefile.in
277 --- grep-2.0/Makefile.in Mon May 3 05:54:24 1993
278 +++ grep+mb1.04/Makefile.in Mon Jul 12 02:02:28 1993
280 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
282 +# Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
283 +# Last change: Jul. 12, 1993 by t^2
290 +# Things you might set to MBCTYPE_DEF to spec. default multi-byte char type.
291 +# -DEUC will make default multi-byte char type EUC and
293 +# If you do not set EUC/SJIS, grep assumes no multi-byte
300 #### End of system configuration section. ####
302 -SRCS=grep.c getopt.c regex.c dfa.c kwset.c obstack.c search.c
303 -OBJS=grep.o getopt.o regex.o dfa.o kwset.o obstack.o search.o
304 +SRCS=grep.c getopt.c regex.c dfa.c kwset.c obstack.c search.c mbc.c
305 +OBJS=grep.o getopt.o regex.o dfa.o kwset.o obstack.o search.o mbc.o
308 - $(CC) $(CFLAGS) $(DEFS) -I$(srcdir) -c $<
309 + $(CC) $(CFLAGS) $(DEFS) $(MBCTYPE_DEF) -I$(srcdir) -c $<
314 V=`sed -n '/version\\[/s/.*\\([0-9][0-9]*\\.[0-9]*\\).*/\\1/p' \
315 + grep.c`+mb`sed -n '/^ + multi-byte/s/[^0-9]*\\([0-9.]*\\).*/\\1/p' \
317 mkdir grep-$$V; mkdir grep-$$V/tests; \
318 - for f in `awk '{print $$1}' MANIFEST`; do ln $$f grep-$$V/$$f; done; \
319 + for f in `awk '{print $$1}' MANIFEST MANIFEST.MB`; \
320 + do ln $$f grep-$$V/$$f; done; \
321 tar cvhf - grep-$$V | gzip > grep-$$V.tar.z; \
324 kwset.o obstack.o: obstack.h
325 regex.o search.o: regex.h
326 +grep.o regex.o dfa.o search.o mbc.o: mbc.h
327 diff -ru2N grep-2.0/Makefile.msc grep+mb1.04/Makefile.msc
328 --- grep-2.0/Makefile.msc Thu Jan 1 09:00:00 1970
329 +++ grep+mb1.04/Makefile.msc Fri Jul 23 04:03:17 1993
331 +# Generated automatically from Makefile.in by configure.
332 +# Makefile for GNU grep
333 +# Copyright (C) 1992 Free Software Foundation, Inc.
335 +# This program is free software; you can redistribute it and/or modify
336 +# it under the terms of the GNU General Public License as published by
337 +# the Free Software Foundation; either version 2, or (at your option)
338 +# any later version.
340 +# This program is distributed in the hope that it will be useful,
341 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
342 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
343 +# GNU General Public License for more details.
345 +# You should have received a copy of the GNU General Public License
346 +# along with this program; if not, write to the Free Software
347 +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
349 +# Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
350 +# Last change: Jul. 23, 1993 by t^2
352 +#### Start of system configuration section. ####
359 +INSTALL_PROGRAM=$(INSTALL)
360 +INSTALL_DATA=$(INSTALL)
362 +CC=cl -nologo -D__STDC__ -AL
365 +# Things you might add to DEFS:
366 +# -DSTDC_HEADERS If you have ANSI C headers and libraries.
367 +# -DHAVE_UNISTD_H If you have unistd.h.
368 +# -DUSG If you have System V/ANSI C string
369 +# and memory functions and headers.
370 +# -D__CHAR_UNSIGNED__ If type `char' is unsigned.
371 +# gcc defines this automatically.
373 +# For DOS, add those to DEFS.dos.
375 +# Things you might set to MBCTYPE_DEF to spec. default multi-byte char type.
376 +# -DEUC will make default multi-byte char type EUC and
378 +# If you do not set EUC/SJIS, grep assumes no multi-byte
383 +LIBS=setargv/noe/st:30000
390 +exec_prefix=$(prefix)
392 +# Prefix for installed program, normally empty or `g'.
394 +# Prefix for installed man page, normally empty or `g'.
397 +# Where to install executables.
398 +bindir=$(exec_prefix)/bin
400 +# Where to install man pages.
401 +mandir=$(prefix)/man/man1
403 +# Extension for man pages.
406 +# How to make a hard link.
409 +#### End of system configuration section. ####
411 +SRCS=grep.c getopt.c regex.c dfa.c kwset.c obstack.c search.c mbc.c
412 +OBJS=grep.obj getopt.obj regex.obj dfa.obj kwset.obj obstack.obj search.obj mbc.obj
415 + cat DEFS.dos $< > $*_.c
416 + $(CC) $(CFLAGS) $(MBCTYPE_DEF) -I$(srcdir) -c -Fo$@ $*_.c
419 +all: grep.exe check.don
423 + #load $(CFLAGS) $(DEFS) -I$(srcdir) (SRCS)
427 + $(LINT) $(CFLAGS) $(DEFS) -I$(srcdir) $(SRCS)
430 + $(INSTALL_PROGRAM) grep.exe $(bindir)/$(binprefix)grep.exe
431 + rm -f $(bindir)/$(binprefix)egrep.exe
432 + $(LN) $(bindir)/$(binprefix)grep.exe $(bindir)/$(binprefix)egrep.exe
433 + rm -f $(bindir)/$(binprefix)fgrep.exe
434 + $(LN) $(bindir)/$(binprefix)grep.exe $(bindir)/$(binprefix)fgrep.exe
438 + echo done >check.don
442 + echo done >check.don
445 + echo $(OBJS:.obj =.obj+)+>link.tmp
446 + echo $(LIBS)>>link.tmp
447 + echo $@/noi;>>link.tmp
452 + rm -f grep.exe *.obj check.don tmp.bat tmp.in khadafy.out
457 + rm -f Makefile config.sta
462 +# Some header file dependencies that really ought to be automatically deduced.
463 +dfa.obj search.obj: dfa.h
464 +grep.obj search.obj: grep.h
465 +kwset.obj search.obj: kwset.h
466 +kwset.obj obstack.obj: obstack.h
467 +regex.obj search.obj: regex.h
468 +grep.obj regex.obj dfa.obj search.obj mbc.obj: mbc.h
469 diff -ru2N grep-2.0/README.MB grep+mb1.04/README.MB
470 --- grep-2.0/README.MB Thu Jan 1 09:00:00 1970
471 +++ grep+mb1.04/README.MB Thu Jun 2 17:03:37 1994
473 +
\e$B!|!|!|!|!|
\e(B GNU grep version 2.0 + multi-byte extension 1.04
\e$B!|!|!|!|!|
\e(B
474 +
\e$B!|!|!|!|!|
\e(B Jun. 2, 1994 by t^2
\e$B!|!|!|!|!|
\e(B
476 + grep-2.0+mb1.04 --
\e$B%^%k%A%P%$%HJ8;zBP1~HG
\e(B GNU grep
480 + GNU
\e$B%W%m%8%'%/%H$K$h$k
\e(B grep, egrep, fgrep (
\e$B0J2<C1$K
\e(B grep)
\e$B$r%^%k%A%P
\e(B
481 +
\e$B%$%HJ8;zBP1~2=$7$?$b$N$G$9
\e(B.
485 + grep
\e$B$+$i$N3HD%ItJ,$@$1$r@bL@$7$^$9
\e(B.
487 +
\e$BA}$($?%*%W%7%g%s$O0J2<$NDL$j$G$9
\e(B.
490 +
\e$B%^%k%A%P%$%HJ8;z$r9MN8$7$^$;$s
\e(B.
\e$B$3$N%*%W%7%g%s$r;HMQ$7$?>l
\e(B
491 +
\e$B9g
\e(B, grep
\e$B$N%*%j%8%J%k$HF1$8F0:n$K$J$k$O$:$G$9
\e(B.
494 +
\e$B%^%k%A%P%$%HJ8;z$H$7$F
\e(B EUC
\e$B$rG'<1$7$^$9
\e(B.
497 +
\e$B%^%k%A%P%$%HJ8;z$H$7$F
\e(B Shift-JIS
\e$B$rG'<1$7$^$9
\e(B.
499 + MS-DOS
\e$B0J30$N%7%9%F%`$G
\e(B, Makefile(.in)?
\e$B$r=q$-49$($:$K%$%s%9%H!<
\e(B
500 +
\e$B%k$7$?>l9g
\e(B,
\e$B%G%U%)%k%H$G$O
\e(B EUC
\e$B$rG'<1$7$^$9
\e(B. MS-DOS
\e$B$G$O%G%U%)
\e(B
501 +
\e$B%k%H$G
\e(B Shift-JIS
\e$B$rG'<1$7$^$9
\e(B.
503 +
\e$B!|
\e(B GREM104.LZH (MS-DOS
\e$BHG<B9T7A<0$r4^$`%"!<%+%$%V
\e(B)
\e$B$K$D$$$F
\e(B (
\e$B$=$l0J30$N
\e(B
504 +
\e$B7ABV$GF~<j$5$l$?J}$OL5;k$7$F$/$@$5$$
\e(B)
506 + 1.
\e$B%"!<%+%$%V$K4^$^$l$F$$$k%U%!%$%k
\e(B
508 +
\e$B%*%j%8%J%k$+$iA4$/<j$r2C$($F$$$J$$%U%!%$%k
\e(B
510 + AUTHORS
\e$B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k
\e(B AUTHORS
511 + CHANGELO
\e$B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k
\e(B ChangeLog
512 + COPYING
\e$B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k
\e(B COPYING
513 + MANIFEST
\e$B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k
\e(B MANIFEST
514 + NEWS
\e$B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k
\e(B NEWS
515 + PROJECTS
\e$B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k
\e(B PROJECTS
516 + README
\e$B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k
\e(B README
518 + grep+mb
\e$BMQ$N%U%!%$%k
\e(B
520 + CHANGELO.MB grep+mb
\e$B$NJQ99MzNr
\e(B
521 + README.MB
\e$B$3$N%U%!%$%k
\e(B
523 + MS-DOS
\e$BHG
\e(B grep+mb
\e$BMQ$N%U%!%$%k
\e(B
525 + GREP.CAT
\e$B%*%j%8%J%k$N%=!<%9$K4^$^$l$F$$$k%^%K%e%"%k%Z!<%8
\e(B.
526 + grep.man
\e$B$r
\e(B GNU roff
\e$B$G%U%)!<%^%C%H$7$?$b$N
\e(B.
527 + GREP.EXE MS-DOS
\e$BHG
\e(B grep-2.0+mb1.04
\e$B$N<B9T7A<0
\e(B
528 + READMAN.SED sed
\e$B$r;}$C$F$$$k?M$X$*$^$1
\e(B
529 + (sed -f readman.sed grep.cat)
531 + 2. GREP.EXE
\e$B$K$D$$$F
\e(B
533 + grep-2.0+mb1.04
\e$B$r
\e(B MS-C 6.00A
\e$B$G%3%s%Q%$%k$7$?$b$N$G$9
\e(B.
535 +
\e$B%G%U%)%k%H$G
\e(B Shift-JIS
\e$B4A;z%3!<%I$r4^$`%Q%?!<%s$d%F%-%9%H$r=hM}
\e(B
538 + setargv.obj
\e$B$rAH$_9~$s$G$"$j$^$9$N$G
\e(B, MS-DOS
\e$B$G%]%T%e%i!<$J%?%$
\e(B
539 +
\e$B%W$N%o%$%k%I%+!<%I$,;HMQ$G$-$^$9
\e(B. UNIX
\e$B$N
\e(B csh
\e$B%i%$%/$J%o%$%k%I
\e(B
540 +
\e$B%+!<%IE83+%k!<%A%s$rMQ0U$7$h$&$+$H$b;W$C$?$N$G$9$,
\e(B, MS-DOS
\e$B$NB>
\e(B
541 +
\e$B$N%3%^%s%I$H$N@09g@-$,<h$l$J$$$7
\e(B,
\e$B%*%j%8%J%k$r$J$k$Y$/B:=E$7$?$+$C
\e(B
542 +
\e$B$?$N$GCGG0$7$^$7$?
\e(B.
544 + 3.
\e$B%$%s%9%H!<%k
\e(B
546 + GREP.EXE
\e$B$O
\e(B, grep
\e$B$O$b$A$m$s
\e(B, egrep, fgrep
\e$B$N5!G=$r4^$s$G$$$^$9
\e(B.
547 + grep
\e$B$K
\e(B -E
\e$B%*%W%7%g%s$rM?$($k$H
\e(B egrep
\e$B$NF0:n
\e(B, -F
\e$B%*%W%7%g%s$rM?
\e(B
548 +
\e$B$($k$H
\e(B fgrep
\e$B$NF0:n$r$7$^$9
\e(B.
\e$B$^$?
\e(B, GREP.EXE
\e$B$r
\e(B EGREP.EXE,
549 + FGREP.EXE
\e$B$H$$$&L>A0$G%3%T!<$7$F
\e(B egrep, fgrep
\e$B$H$7$F5/F0$9$k$H
\e(B,
550 +
\e$B$=$NL>A0$K$U$5$o$7$$F0:n$r$7$^$9
\e(B.
\e$B%O!<%I%G%#%9%/$KM>M5$N$J$$J}
\e(B
553 + A>copy grep.exe a:\bin
554 + A>copy grep.exe a:\bin\egrep.exe
555 + A>copy grep.exe a:\bin\fgrep.exe
557 +
\e$B$J$I$H$7$F$4;HMQ$K$J$i$l$k$3$H$r$*4+$a$7$^$9
\e(B.
\e$B$I$&$7$F$b%O!<%I
\e(B
558 +
\e$B%G%#%9%/$NL5BL;H$$$r$7$?$/$J$1$l$P
\e(B,
561 + grep -E %1 %2 %3 %4 %5 %6 %7 %8 %9
563 +
\e$B$J$I$N%P%C%A%U%!%$%k$r:n@.$9$k$H$$$&<j$b$"$j$^$9
\e(B.
565 + 4.
\e$B%3%^%s%I%i%$%s0z?t$K$D$$$F
\e(B
567 +
\e$BA0=R$7$?$H$*$j
\e(B MS-C
\e$B$N
\e(B setargv.obj
\e$B$r%j%s%/$7$F$$$^$9$N$G
\e(B,
\e$B$=$N
\e(B
568 +
\e$B;EMM$K=>$o$J$1$l$P$J$j$^$;$s
\e(B.
570 +
\e$B#1$D#1$D$N0z?t$O6uGr$G6h@Z$j$^$9
\e(B.
\e$B0z?t$K6uGr
\e(B, ", \, <, >, |
\e$B$r
\e(B
571 +
\e$B4^$`$H$-$O%/%)!<%F%#%s%0$,I,MW$G$9
\e(B.
\e$B$=$NJ}K!$O
\e(B COMMAND.COM
\e$B$N%P
\e(B
572 +
\e$B%0=-$$;EMM$H
\e(B,
\e$B$5$i$K
\e(B setargv.obj
\e$B$K$bLdBj$,$"$j
\e(B,
\e$B$+$J$jFq$7$$$N
\e(B
573 +
\e$B$G$3$3$G$O@bL@$r>J$-$^$9
\e(B.
\e$B3F<+8&5f$7$F$/$@$5$$
\e(B.
\e$B0lHV4JC1$J$N$O
\e(B,
574 +
\e$B8!:w%Q%?!<%s$r%U%!%$%k$K$7$F
\e(B
576 + grep -f
\e$B%U%!%$%kL>
\e(B
578 +
\e$B$H$9$k$3$H$G$9
\e(B.
580 + 5.
\e$B%^%K%e%"%k
\e(B
582 + roff
\e$B7O$N%U%)!<%^%C%?$r;H$($J$$?M$N$?$a$K
\e(B GNU roff
\e$B$G%U%)!<%^%C
\e(B
583 +
\e$B%H:Q$_$N%^%K%e%"%k$rMQ0U$7$^$7$?
\e(B.
\e$B%\!<%k%I%U%'!<%9
\e(B,
\e$B%"%s%@!<%i
\e(B
584 +
\e$B%$%sBP1~$N
\e(B less
\e$B$J$I$G$*FI$_$/$@$5$$
\e(B.
\e$B%(%G%#%?$J$I$G$O
\e(B ^H
\e$B$,F~$C
\e(B
585 +
\e$B$F$$$FFI$_$K$/$$$H;W$$$^$9
\e(B.
589 +
\e$B$H$$$&
\e(B sed
\e$B$N%W%m%0%i%`$KDL$;$P
\e(B,
\e$BDL>o$N%F%-%9%H%U%!%$%k$,F@$i$l
\e(B
590 +
\e$B$^$9
\e(B. (^H
\e$B$H$$$&$N$O%3%s%H%m!<%k%3!<%I$rD>@\Kd$a$3$`$H$$$&0UL#
\e(B
593 +
\e$B!|%$%s%9%H!<%k
\e(B (MS-DOS
\e$B0J30
\e(B)
595 +
\e$B%G%U%)%k%H$N%^%k%A%P%$%HJ8;z$N@_Dj$O
\e(B, Makefile.in
\e$B$NCf$G;XDj$7$^$9
\e(B.
596 +
\e$B%G%U%)%k%H$r
\e(B Shift-JIS
\e$B$H$9$k>l9g$H
\e(B,
\e$B%G%U%)%k%H$G%^%k%A%P%$%HJ8;z$r
\e(B
597 +
\e$B;HMQ$7$J$$>l9g$O
\e(B Makefile.in
\e$B$N
\e(B MBCTYPE_DEF
\e$B%^%/%m$NDj5A$r$=$l$>$l0J
\e(B
598 +
\e$B2<$N$h$&$KJQ$($F$/$@$5$$
\e(B.
600 + MBCTYPE_DEF=-DSJIS (
\e$B%G%U%)%k%H$G
\e(B Shift-JIS
\e$B$N>l9g
\e(B)
601 + MBCTYPE_DEF= (
\e$B%G%U%)%k%H$G;HMQ$7$J$$>l9g
\e(B)
603 +
\e$B$$$:$l$N>l9g$G$b5/F0;~$N%*%W%7%g%s$K$h$j%^%k%A%P%$%HJ8;z%3!<%I$NA*Br
\e(B
604 +
\e$B$,2DG=$G$9
\e(B.
606 +
\e$B$=$NB>$N:n6H$O
\e(B,
\e$B%*%j%8%J%k$N
\e(B grep
\e$B$HF1MM$G$9$N$G
\e(B INSTALL
\e$B$r$*FI$_$/
\e(B
609 +
\e$B!|%$%s%9%H!<%k
\e(B (MS-DOS
\e$BHG
\e(B.
\e$B$3$3$G$$$&%$%s%9%H!<%k$H$$$&$N$O
\e(B,
\e$B%=!<%9$+$i
\e(B
610 +
\e$B$N%$%s%9%H!<%k$N$3$H$G$9
\e(B)
612 + MS-C 6.00A
\e$B$r;HMQ$7$F
\e(B,
\e$B%G%U%)%k%H$G
\e(B Shift-JIS
\e$B$rG'<1$9$k
\e(B grep
\e$B$r:n@.
\e(B
613 +
\e$B$9$k>l9g$O
\e(B, README.MSC
\e$B$KL\$rDL$7$F
\e(B,
\e$BI,MW$J$i%i%$%V%i%j$K%Q%C%A$rEv
\e(B
616 + A>nmake -f makefile.msc
618 +
\e$B$H$9$k$@$1$G#O#K$G$9
\e(B. grep.exe
\e$B$r:n@.8e
\e(B,
\e$B<+F0E*$K%F%9%H$r9T$$$^$9
\e(B.
619 +
\e$B$=$N:]
\e(B, grep
\e$B$+$i$N%(%i!<%a%C%;!<%8$,$$$/$D$+I=<($5$l$^$9$,
\e(B,
\e$B$=$l$O
\e(B
620 +
\e$B0[>o$G$O$"$j$^$;$s
\e(B.
\e$B%(%i!<$r4^$`%Q%?!<%s$rEO$7$?;~$K
\e(B,
\e$B=*N;%9%F!<%?
\e(B
621 +
\e$B%9$,
\e(B 2
\e$B$H$J$k$3$H$r3NG'$7$F$$$k$@$1$G$9
\e(B.
\e$BK\Ev$K0[>o$,$"$C$?>l9g$O
\e(B
622 + "Spencer test #nn faild" (nn
\e$B$O?t;z
\e(B)
\e$B$HI=<($5$l$^$9
\e(B.
624 +
\e$B%F%9%H$K%Q%9$7$?$i
\e(B, grep.exe
\e$B$rE,Ev$J%G%#%l%/%H%j$K%3%T!<$7$F$/$@$5
\e(B
625 +
\e$B$$
\e(B.
\e$B$=$N:]
\e(B,
\e$BL>A0$r
\e(B egrep.exe, fgrep.exe
\e$B$HJQ$($k$@$1$G
\e(B,
\e$B$=$l$>$l
\e(B
626 + egrep, fgrep
\e$B$NF0:n$r$7$^$9
\e(B.
\e$B$=$3$G
\e(B,
\e$BNc$($P
\e(B a:\bin
\e$B$X%$%s%9%H!<%k$9
\e(B
629 + A>copy grep.exe a:\bin
630 + A>copy grep.exe a:\bin\egrep.exe
631 + A>copy grep.exe a:\bin\fgrep.exe
633 +
\e$B$J$I$H$7$^$9
\e(B.
635 +
\e$B$=$NB>$N=hM}7O$r;HMQ$9$k>l9g$d
\e(B,
\e$B%G%U%)%k%H$r
\e(B Shift-JIS
\e$B0J30$K$9$k>l
\e(B
636 +
\e$B9g$O
\e(B Makefile.msc
\e$B$r;29M$K
\e(B Makefile
\e$B$r=q$$$F$/$@$5$$
\e(B.
\e$B$J$*
\e(B,
\e$B%F%9%H$K
\e(B
637 +
\e$B$O
\e(B awk (gawk)
\e$B$,I,MW$G$9
\e(B.
641 + 1.
\e$B$$$o$f$k
\e(B JIS
\e$B$K$OBP1~$7$F$$$^$;$s
\e(B.
\e$B>-MhBP1~$9$kM=Dj$b$"$j$^$;$s
\e(B.
643 + 2.
\e$B%^%k%A%P%$%HJ8;z%3!<%I$O$"$^$j873J$K$O9M$($F$$$^$;$s
\e(B.
645 + EUC
\e$B#1%P%$%HL\
\e(B ... 0x80 - 0xff
646 + EUC
\e$B#2%P%$%HL\
\e(B ... 0x01 - 0xff (0x0a
\e$B$r=|$/
\e(B)
648 + Shift-JIS
\e$B#1%P%$%HL\
\e(B ... 0x80 - 0x9f, 0xe0 - 0xff
649 + Shift-JIS
\e$B#2%P%$%HL\
\e(B ... 0x01 - 0xff (0x0a
\e$B$r=|$/
\e(B)
651 +
\e$B$H$7$F=hM}$7$F$$$^$9
\e(B.
\e$BH>3Q%+%J$b;H$($^$9
\e(B. EUC
\e$B$N
\e(B SS3 (0x8f)
\e$B$K
\e(B
652 +
\e$B;O$^$k#3%P%$%H%3!<%I$O;H$($^$;$s
\e(B. (
\e$B;d$O$3$l$r%5%]!<%H$7$F$$$k%7
\e(B
653 +
\e$B%9%F%`$r8+$?$3$H$,$J$$
\e(B...)
655 + 3. -b
\e$B%*%W%7%g%s$GI=<($5$l$k%P%$%H%*%U%;%C%H$O
\e(B DOS
\e$B$N>l9g
\e(B CR+LF
\e$B$r
\e(B 1
656 +
\e$B$H$7$F%+%&%s%H$7$?CM$K$J$j$^$9
\e(B. (
\e$B<jH4$-
\e(B)
658 +
\e$B!|%"%k%4%j%:%`
\e(B (dfa.[ch]
\e$B$N%^%k%A%P%$%HJ8;zBP1~2=
\e(B)
660 +
\e$B0JA0$OGyA3$H
\e(B, DFA
\e$B$rD>@\
\e(B EUC
\e$B$d
\e(B Shift-JIS
\e$B$N$h$&$JJ8;z<o$NB?$$%3!<%I
\e(B
661 +
\e$B%;%C%H$KBP1~$5$;$k$N$O
\e(B,
\e$BHs>o$KFq$7$$$H;W$C$F$$$^$7$?
\e(B.
\e$B$H$3$m$,$"$k
\e(B
662 +
\e$BF|
\e(B,
\e$B<+:n%i%$%V%i%j$N%F%9%HMQ$K
\e(B,
\e$B@55,I=8=$r
\e(B DFA
\e$B$XJQ49$9$k4JC1$J%W%m
\e(B
663 +
\e$B%0%i%`$r=q$$$?$H$-$K
\e(B,
\e$BFMA3$&$^$$%"%$%G%#%"$,A.$$$?$N$G$9
\e(B.
\e$B%^%k%A%P
\e(B
664 +
\e$B%$%HJ8;z$H$$$($I$b7k6I$O%P%$%H$NJB$S$G$9
\e(B.
\e$B%^%k%A%P%$%HJ8;z$r
\e(B,
\e$B$9$Y
\e(B
665 +
\e$B$F%P%$%HC10L$KJ,2r$7$F
\e(B,
\e$B@55,I=8=$r:n$C$F$7$^$($P$h$+$C$?$N$G$9
\e(B.
667 +
\e$B8@MU$G$O$&$^$/I=8=$G$-$J$$$N$G
\e(B,
\e$B0J2<$N5-9f$r;HMQ$7
\e(B,
\e$B$I$&$$$&$U$&$K%P
\e(B
668 +
\e$B%$%HC10L$KJ,2r$7$F$$$k$N$+
\e(B,
\e$BNc$r5s$2$^$9
\e(B.
670 + a, b, c ...
\e$B%7%s%0%k%P%$%HJ8;z
\e(B.
671 + x, y, z ...
\e$B%^%k%A%P%$%HJ8;z$N#1J8;zL\
\e(B.
673 + . (
\e$BG$0U$N#1J8;z
\e(B)
674 + ==> [a-c]|[x-z][a-z]
676 + (
\e$B%7%s%0%k%P%$%HJ8;z$+
\e(B,
\e$B$^$?$O%^%k%A%P%$%HJ8;z$N#1J8;zL\$H
\e(B
677 +
\e$BG$0U$N#1J8;z$NO"@\
\e(B.)
679 + [xb-zx] (xb
\e$B$+$i
\e(B zx
\e$B$NHO0O$N%^%k%A%P%$%HJ8;z
\e(B)
680 + ==> x[b-z]|y[a-z]|z[a-x]
685 +
\e$B<B:]$K$O@55,I=8=$r:n$j=P$9$N$G$O$J$/
\e(B,
\e$B@55,I=8=$rJ,2r$7$?%H!<%/%s$rD>
\e(B
686 +
\e$B@\@8@.$7$F$$$^$9
\e(B.
\e$B$3$NJU
\e(B,
\e$B6=L#$,$"$kJ}$O%=!<%9$r8+$?$[$&$,Aa$$$H;W
\e(B
687 +
\e$B$$$^$9
\e(B. (
\e$B$"$^$j%(%l%,%s%H$G$O$"$j$^$;$s$N$G%=!<%9$r$8$C$/$j8+$i$l$k
\e(B
688 +
\e$B$N$OCQ$:$+$7$$5$$b$7$^$9$,
\e(B...)
690 +
\e$B$3$l$@$1$G$O
\e(B,
\e$BNc$($P$"$k%F%-%9%H$+$i
\e(B xy
\e$B$H$$$&J8;z$rC5$=$&$H$9$k$H
\e(B,
691 + xxyy
\e$B$N$h$&$JJ8;z$NJB$S$K$^$GH?1~$7$F$7$^$$$^$9
\e(B.
\e$B$=$3$G
\e(B,
\e$B%^%k%A%P%$
\e(B
692 +
\e$B%H%b!<%I$N$H$-$K$OI,$:
\e(B "^.*(" +
\e$B%f!<%6%Q%?!<%s
\e(B + ")"
\e$B$H$7$F=hM}$7$^
\e(B
693 +
\e$B$9
\e(B. '.*'
\e$B$K$h$j
\e(B, '.'
\e$B$O%^%k%A%P%$%HJ8;z$N0lIt$K$O%^%C%A$7$^$;$s$+$i
\e(B,
694 +
\e$BF,=P$7$G$-$k$o$1$G$9
\e(B.
696 +
\e$B!|
\e(B dfa.[ch], regex.[ch]
\e$B$N3HD%;EMM
\e(B
698 + dfa.[ch], regex.[ch]
\e$B%b%8%e!<%k$O
\e(B mbc.[ch]
\e$B%b%8%e!<%k$K0MB8$7$F$$$^
\e(B
699 +
\e$B$9
\e(B.
\e$B$^$?
\e(B,
\e$B$3$l$O%*%j%8%J%k$N;EMM$G$9$,
\e(B, dfa.[ch]
\e$B$r;HMQ$9$k>l9g$O
\e(B
700 + regex.h
\e$B$NDj5A$,I,MW$G$9
\e(B.
702 +
\e$B%^%k%A%P%$%HJ8;z$N%?%$%W$O
\e(B, mbc.[ch]
\e$B$N
\e(B mbcinit()
\e$B$G@_Dj$7$^$9
\e(B.
703 + mbc.h
\e$B$KDj5A$5$l$F$$$k%^%/%m
\e(B MBCTYPE_ASCII, MBCTYPE_EUC,
704 + MBCTYPE_SJIS
\e$B$N$$$:$l$+$r
\e(B mbcinit()
\e$B$KEO$7$F$/$@$5$$
\e(B.
706 + dfa.[ch]
\e$B$O
\e(B,
\e$B%Q%?!<%s$N%3%s%Q%$%k;~$K$@$1
\e(B,
\e$B$3$N
\e(B mbc.[ch]
\e$B$N@_Dj$r;2
\e(B
707 +
\e$B>H$7$^$9
\e(B.
\e$B%Q%?!<%s%^%C%A%s%0$N:]$O
\e(B,
\e$B%3%s%Q%$%k;~$K@_Dj$5$l$F$$$?
\e(B,
708 +
\e$B%^%k%A%P%$%HJ8;z$N%?%$%W$r8!:w$7$^$9
\e(B.
710 +
\e$B0lJ}
\e(B, regex.[ch]
\e$B$O
\e(B,
\e$B%Q%?!<%s%3%s%Q%$%k;~
\e(B,
\e$B%^%C%A%s%0;~$NN>J}$G
\e(B
711 + mbc.[ch]
\e$B$N@_Dj$r;2>H$7$^$9
\e(B.
\e$B$,
\e(B,
\e$B$3$NN><T$G
\e(B mbc.[ch]
\e$B$N@_Dj$rJQ99$9
\e(B
712 +
\e$B$k$3$H$O$G$-$^$;$s
\e(B.
\e$B$D$^$j
\e(B, Shift-JIS
\e$B$G5-=R$5$l$?%Q%?!<%s$r
\e(B, EUC
713 +
\e$B%F%-%9%H$+$i8!:w$9$k$H$$$C$?F0:n$O$G$-$^$;$s
\e(B.
\e$BCm0U$7$F$/$@$5$$
\e(B.
715 +
\e$B%^%k%A%P%$%HJ8;zBP1~$KH<$C$FCm0U$9$Y$-@55,I=8=$r0J2<$K5-$7$^$9
\e(B.
717 + .
\e$BG$0U$N#1%P%$%HJ8;z
\e(B,
\e$B@5Ev$J%^%k%A%P%$%HJ8;z$K%^%C%A$7$^$9
\e(B.
718 +
\e$B!V@5Ev$J%^%k%A%P%$%HJ8;z!W$H$O
\e(B,
\e$B%^%k%A%P%$%HJ8;z$N#1J8;z
\e(B
719 +
\e$BL\$K
\e(B, '\0'
\e$B$^$?$O
\e(B '\n'
\e$B0J30$,B3$/J8;z$N$3$H$G$9
\e(B.
721 + [x-y]
\e$BJ8;z%3!<%I
\e(B (
\e$BFbItI=8=
\e(B)
\e$B$,
\e(B x
\e$B$+$i
\e(B y
\e$B$NHO0O$K$"$kG$0U$N#1J8
\e(B
722 +
\e$B;z$K%^%C%A$7$^$9
\e(B.
\e$B$3$l$b
\e(B .
\e$B$HF1$8$/
\e(B,
\e$B@5Ev$G$J$$J8;z$K$O
\e(B
723 +
\e$B%^%C%A$7$^$;$s
\e(B.
725 + [^x-y]
\e$BJ8;z%3!<%I
\e(B (
\e$BFbItI=8=
\e(B)
\e$B$,
\e(B x
\e$B$+$i
\e(B y
\e$B$NHO0O$K$J$$G$0U$N#1J8
\e(B
726 +
\e$B;z$K%^%C%A$7$^$9
\e(B.
\e$B@5Ev$G$J$$J8;z$K$b%^%C%A$7$^$9
\e(B.
728 +
\e$B%^%k%A%P%$%HJ8;z$NFbItI=8=$OC1$K#1%P%$%HL\$r>e0L%P%$%H
\e(B,
\e$B#2%P%$%HL\$r
\e(B
729 +
\e$B2<0L%P%$%H$H$7$?#1#6%S%C%HId9f$J$7@0?t$G$9
\e(B. Shift-JIS
\e$B$G$b
\e(B EUC
\e$B$G$b
\e(B
731 +
\e$B#1%P%$%H
\e(B ASCII
\e$BJ8;z
\e(B <
\e$BH>3Q%+%JJ8;z
\e(B <
\e$BA43QJ8;z
\e(B
733 +
\e$B$H$$$&Bg>.4X78$,@.$jN)$C$F$$$^$9
\e(B.
737 + 1.
\e$B%*%j%8%J%k$N
\e(B GNU grep
\e$B$NCx:n8"$O
\e(B Free Software Foundation, Inc.
738 +
\e$B$,M-$7$F$$$^$9
\e(B.
\e$B%Q%C%AItJ,
\e(B (grep-mb.diff)
\e$B$NCx:n8"$O;d
\e(B (t^2)
\e$B$,M-
\e(B
739 +
\e$B$7$F$$$^$9
\e(B.
741 + 2. GNU grep
\e$B$N%=!<%9%3!<%I$O3F=j$N
\e(B ftp
\e$B%5%$%H
\e(B,
\e$B$b$7$/$O
\e(B Nifty-serve
742 +
\e$B$N
\e(B FUNIX
\e$B$N%G!<%?%i%$%V%i%j$+$iF~<j2DG=$G$9
\e(B. GNU grep
\e$B$+$i
\e(B
743 + grep+mb
\e$B$X$N:9J,
\e(B grep-mb.diff
\e$B$O
\e(B,
\e$B;d$,
\e(B FUNIX
\e$B$XEPO?$7
\e(B,
\e$BF21`OBO:;a
\e(B
744 + (dohzono@sdsft.kme.mei.co.jp)
\e$B$,
\e(B fj.sources
\e$B$X%]%9%H$7$F$/$@$5$C
\e(B
747 + 3.
\e$B:9J,
\e(B grep-mb.diff
\e$B$N:FG[I[$O<+M3$G$9
\e(B.
\e$B$3$l$K4X$7$F$O
\e(B FSF
\e$B$N5,Dj$K
\e(B
748 +
\e$B=>$&I,MW$b$"$j$^$;$s
\e(B.
\e$B$7$+$7:9J,$rE,MQ$7$?7k2L$N%=!<%9%3!<%I
\e(B,
\e$B$*
\e(B
749 +
\e$B$h$S<B9T7A<0$G$N:FG[I[$N:]$O
\e(B GNU GENERAL PUBLIC LICENSE (COPYING
750 +
\e$B;2>H
\e(B)
\e$B$K=>$C$F$/$@$5$$
\e(B.
752 + grep+mb
\e$B$K2?$i$+$N2~JQ$r2C$($?$b$N$r:FG[I[$9$k:]$b
\e(B, GNU GENERAL
753 + PUBLIC LICENSE
\e$B$K=>$&$h$&$KCm0U$7$F$/$@$5$$
\e(B.
\e$B$^$?
\e(B grep+mb
\e$B$K4^$^
\e(B
754 +
\e$B$l$k%3!<%I
\e(B (dfa.[ch]
\e$B$d
\e(B regex.[ch])
\e$B$rMxMQ$7$?%W%m%0%i%`$rG[I[$9
\e(B
755 +
\e$B$k:]$b
\e(B GNU GENERAL PUBLIC LICENSE
\e$B$N3:EvItJ,$K=>$C$F$/$@$5$$
\e(B.
757 +
\e$B$^$?5AL3$G$O$"$j$^$;$s$,:FG[I[$5$l$kJ}$O;v8e$K$G$bO"Mm$r$/$@$5$$
\e(B.
758 +
\e$B$=$7$F2DG=$J8B$j
\e(B,
\e$B?7$7$$%P!<%8%g%s$X$N%"%C%W%G!<%H$KEX$a
\e(B,
\e$BMxMQ<T
\e(B
759 +
\e$B$+$i$NO"Mm$,;d$KFO$/$h$&$KG[N8$7$F$/$@$5$$
\e(B.
761 + 4.
\e$B$3$N%W%m%0%i%`$OL5J]>Z$G$9
\e(B.
763 + 5. grep+mb
\e$B$K2?$i$+$NIT6q9g$,H/@8$7$?>l9g
\e(B, (FSF
\e$B$d
\e(B,
\e$B%*%j%8%J%k$N:n<T
\e(B
764 +
\e$B$G$O$J$/
\e(B)
\e$B;d$KO"Mm$7$F$/$@$5$$
\e(B.
\e$BG[I[$7$??M$,4uK>$7$F$$$k>l9g$O
\e(B,
765 +
\e$B$=$N?M$KO"Mm$7$F$/$@$5$$
\e(B.
767 + 6.
\e$B$4<ALd
\e(B/
\e$B$4MWK>
\e(B/
\e$B$*<8$j
\e(B,
\e$B$=$NB>$bBg4?7^$G$9
\e(B.
\e$B$G$-$k$+$.$j%5%]!<%H$7
\e(B
772 +
\e$B86:n<T$*$h$S
\e(B FSF
\e$B$K46<U$7$^$9
\e(B.
774 +
\e$B%I%-%e%a%s%H:n@.$K4X$7$F=u8@$r$/$@$5$C$?F21`OBO:;a
\e(B
775 + (dohzono@sdsft.kme.mei.co.jp)
\e$B$K46<U$7$^$9
\e(B.
777 +
\e$B$3$l$^$GE>:\
\e(B/
\e$B%P%0Js9p$r$/$@$5$C$?J}!9$K46<U$7$^$9
\e(B.
\e$B<BL>$r5s$2$5$;$F
\e(B
778 +
\e$BD:$-$?$+$C$?$N$G$9$,%O!<%I%G%#%9%/$N%H%i%V%k$G$[$H$s$I$N%a!<%k$r>C<:
\e(B
779 +
\e$B$5$;$F$7$^$$$^$7$?
\e(B.
781 +
\e$B:G8e$K
\e(B,
\e$B5.=E$J%G%#%9%/%9%Z!<%9$r
\e(B grep+mb
\e$B$N$?$a$K3d$$$F$4;HMQD:$$$F
\e(B
782 +
\e$B$$$k$9$Y$F$NMxMQ<T$NJ}!9$K46<U$7$^$9
\e(B.
784 +
\e$B!|!V;d!W$NO"Mm@h
\e(B
786 +
\e$B")
\e(B810
\e$BJ!2,;TCf1{6hG_8w1`CDCO
\e(B 7-207 (
\e$BCm
\e(B:
\e$BE>5o$7$^$7$?
\e(B)
787 + TEL/FAX: 092-731-4025 (TEL/FAX
\e$B<+F0@ZBX$(
\e(B)
788 + 092-724-6342 (TEL
\e$B$N$_
\e(B)
789 + E-mail: NBC02362@niftyserve.or.jp
\e$BC+K\9'9@
\e(B
792 +# mode: indented-text
793 +# indent-tabs-mode: nil
794 +# tab-stop-list: (4 8 16 24 32 40 48 56 64 72 80)
798 +# version-control: never
800 diff -ru2N grep-2.0/README.MSC grep+mb1.04/README.MSC
801 --- grep-2.0/README.MSC Thu Jan 1 09:00:00 1970
802 +++ grep+mb1.04/README.MSC Sat Mar 5 16:14:14 1994
804 +PC-9801
\e$BMQ
\e(B MS-C version 6.00A
\e$B$N0z?t$N%;%C%H%"%C%W%k!<%A%s$K$O%P%0$,$"$j
\e(B
810 +main(int argc, char **argv)
814 + for (i = 0; i <= argc; i++)
815 + printf("argv[%d] == %s\n", i, argv[i]);
819 +
\e$B$r%3%s%Q%$%k
\e(B,
\e$B%j%s%/$7$?
\e(B FOO.EXE
\e$B$K
\e(B
823 +
\e$B$J$I$N0z?t$rEO$7$F<B9T$9$k$H
\e(B,
\e$B%P%0$,3NG'$G$-$^$9
\e(B.
\e$B$^$?
\e(B,
\e$B%o%$%k%I%+!<%I
\e(B
824 +
\e$BE83+%k!<%A%s$K$b%P%0$,$"$j
\e(B,
\e$B>e5-$N%W%m%0%i%`$r
\e(B SETARGV.OBJ
\e$B$H$H$b$K%j%s
\e(B
829 +
\e$B$J$I$N0z?t$G<B9T$9$k$H
\e(B,
\e$B$*$+$7$JE83+$N;EJ}$r$7$F$7$^$$$^$9
\e(B.
831 +
\e$B$3$N%P%0$O
\e(B SOURCE/STARTUP
\e$B2<$N
\e(B DOS/STDARGV.ASM
\e$B$*$h$S
\e(B WILD.C
\e$B$K0J2<$N%Q%C
\e(B
832 +
\e$B%A$rEv$F$k$H=$@5$G$-$k$h$&$G$9
\e(B.
\e$B%Q%C%A$rEv$F$F
\e(B STARTUP.BAT
\e$B$G%3%s%Q%$%k
\e(B
833 +
\e$B$7$F$/$@$5$$
\e(B.
\e$B$=$N8e
\e(B,
\e$BNc$($P%i!<%8%b%G%kMQ$N%i%$%V%i%j$r=$@5$9$k>l9g
\e(B,
834 +L/DOS/STDARGV.OBJ, L/DOS/_SETARGV.OBJ, L/WILD.OBJ
\e$B$r$=$l$>$l
\e(B
835 +KSTDARGV.OBJ, _KSTARGV.OBJ, KWILD.OBJ
\e$B$H%j%M!<%`$7
\e(B,
837 + lib \msc6\lib\llibce.lib-+dos\kstdargv.obj-+dos\_kstargv.obj-+kwild.obj;
839 +
\e$B$J$I$H$7$F%b%8%e!<%k$r99?7$7$F$/$@$5$$
\e(B.
\e$BG0$N$?$a$3$N:n6H$r9T$&A0$K
\e(B,
841 + lib \msc6\lib\llibce.lib*kstdargv.obj*_kstargv.obj*kwild.obj;
843 +
\e$B$J$I$G
\e(B, kstdargv.obj, _kstargv.obj, kwild.obj
\e$B$N%P%C%/%"%C%W$r$H$C$FCV$/
\e(B
844 +
\e$B$H$$$$$G$7$g$&
\e(B.
846 +
\e$B$J$*
\e(B,
\e$B$3$N%Q%C%A$OEvA3$N$3$H$J$,$iL5J]>Z$G$9
\e(B.
850 +*** stdargv.org Mon Oct 8 19:50:46 1990
851 +--- stdargv.asm Thu Jul 22 17:50:44 1993
855 + adc dx,cx ; add 1 for every pair of backslashes
856 + test al,1 ; plus 1 for the " if odd number of \
860 + ; Command line is fully parsed - compute number of bytes needed
863 + adc dx,cx ; add 1 for every pair of backslashes
864 + test al,1 ; plus 1 for the " if odd number of \
865 +! jnz arg310 ; ! Jul.21.93 t^2
868 + ; Command line is fully parsed - compute number of bytes needed
870 +*** wild.org Mon Oct 8 19:49:48 1990
871 +--- wild.c Sat Mar 5 00:42:12 1994
874 + char *ptr2 = arg; // [J1]
876 + if(ptr != arg) { // [J1]
877 +! while(ptr2 + 1 != ptr && *ptr2 != SLASHCHAR && *ptr2 != FWDSLASHCHAR
878 +! && *ptr2 != ':') { // [J1]
879 + if(iskanji(*ptr2)) ptr2++; // [J1]
882 +! ptr = ptr2; // [J1]
885 + if (*ptr == ':' && ptr != arg+1) /* weird name, just add it as is */
887 + char *ptr2 = arg; // [J1]
889 + if(ptr != arg) { // [J1]
892 +! while (ptr2 < ptr) {
893 +! if (*ptr2 == SLASHCHAR || *ptr2 == FWDSLASHCHAR
896 + if(iskanji(*ptr2)) ptr2++; // [J1]
902 + if (*ptr == ':' && ptr != arg+1) /* weird name, just add it as is */
903 diff -ru2N grep-2.0/configure grep+mb1.04/configure
904 --- grep-2.0/configure Sat May 22 13:20:23 1993
905 +++ grep+mb1.04/configure Fri Jul 9 13:05:45 1993
909 -for func in getpagesize memchr strerror valloc
910 +for func in getpagesize memchr strerror valloc bcopy memmove strcasecmp
912 trfunc=HAVE_`echo $func | tr '[a-z]' '[A-Z]'`
913 diff -ru2N grep-2.0/configure.in grep+mb1.04/configure.in
914 --- grep-2.0/configure.in Sat May 22 13:20:16 1993
915 +++ grep+mb1.04/configure.in Fri Jul 9 13:05:32 1993
919 -AC_HAVE_FUNCS(getpagesize memchr strerror valloc)
920 +AC_HAVE_FUNCS(getpagesize memchr strerror valloc bcopy memmove strcasecmp)
923 diff -ru2N grep-2.0/dfa.c grep+mb1.04/dfa.c
924 --- grep-2.0/dfa.c Mon May 31 08:02:20 1993
925 +++ grep+mb1.04/dfa.c Sat Jul 10 01:17:14 1993
927 /* Written June, 1988 by Mike Haertel
928 Modified July, 1988 by Arthur David Olson to assist BMG speedups */
929 +/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
930 + Last change: Jul. 10, 1993 by t^2 */
937 +#define bcopy(s, d, n) memcpy(d, s, n)
939 +#define bzero(d, n) memset(d, 0, n)
949 fprintf(stderr, "END");
950 else if (t < NOTCHAR)
951 - fprintf(stderr, "%c", t);
953 + fprintf(stderr, "0x%02x", (unsigned char)t);
955 + fprintf(stderr, "%c", t);
967 + for (i = 0; i < CHARCLASS_INTS; i++)
973 /* A pointer to the current dfa is kept here during parsing. */
974 static struct dfa *dfa;
977 /* Syntax bits controlling the behavior of the lexical analyzer. */
978 -static int syntax_bits, syntax_bits_set;
979 +static unsigned long syntax_bits;
980 +static int syntax_bits_set;
982 /* Flag for case-folding letters into sets. */
985 dfasyntax(bits, fold)
987 + unsigned long bits;
991 static int minrep, maxrep; /* Repeat counts for {m,n}. */
993 +static charclass cs_cset[8];
994 +static token cs_tok[8] = {0, 0, 0, 0, 0, 0, 0, 0};
997 + MBEXTTOK_NONE = -1,
998 + MBEXTTOK_NOTCHAR = 256,
999 + MBEXTTOK_ORMBC = MBEXTTOK_NOTCHAR,
1000 + MBEXTTOK_ORMBC_NL,
1002 + MBEXTTOK_INVCLASS,
1003 +} mbexttok = MBEXTTOK_NONE;
1005 +static charclass mbcset_set;
1006 +static charclass mbcset_all;
1007 +static charclass mbcset[128]; /* 128*256/8 = 4 Kbytes */
1009 +/*
\e$BIQHK$K;HMQ$5$l$k
\e(B (
\e$B$H;W$o$l$k
\e(B)
\e$BJ8;z=89g$r%H!<%/%s$H$7$FJV$9
\e(B.
1010 + n = 0 ... 1
\e$B%P%$%HJ8;zA4BN$N=89g
\e(B.
1011 + 1 ... 2
\e$B%P%$%HJ8;z$N
\e(B1
\e$B%P%$%HL\A4BN$N=89g
\e(B.
1012 + 2 ... 2
\e$B%P%$%HJ8;z$N
\e(B2
\e$B%P%$%HL\A4BN$N=89g
\e(B.
1013 + +4 ... '\n'
\e$B$r=|30$7$J$$
\e(B. */
1021 + zeroset(cs_cset[n]);
1025 + /* 1
\e$B%P%$%HJ8;zA4BN$N=89g
\e(B. */
1026 + for (c = 0; c < NOTCHAR; c++)
1028 + setbit(c, cs_cset[n]);
1029 + notset(cs_cset[n]);
1033 + /* 2
\e$B%P%$%HJ8;z$N
\e(B1
\e$BJ8;zL\A4BN$N=89g
\e(B. */
1034 + for (c = 0; c < NOTCHAR; c++)
1036 + setbit(c, cs_cset[n]);
1040 + /* 2
\e$B%P%$%HJ8;z$N
\e(B2
\e$BJ8;zL\A4BN$N=89g
\e(B. */
1041 + notset(cs_cset[n]);
1045 + if (syntax_bits & RE_DOT_NOT_NULL || n != 0)
1046 + clrbit('\0', cs_cset[n]);
1047 + if (!(syntax_bits & RE_DOT_NEWLINE) || n != 0)
1048 + clrbit('\n', cs_cset[n]);
1050 + cs_tok[n] = CSET + charclass_index(cs_cset[n]);
1055 /* Note that characters become unsigned here. */
1056 #define FETCH(c, eoferr) \
1058 it means that just about every case begins with
1059 "if (backslash) ...". */
1060 + mbexttok = MBEXTTOK_NONE;
1061 for (i = 0; i < 2; ++i)
1063 @@ -543,14 +629,19 @@
1066 + if (current_mbctype != MBCTYPE_ASCII)
1067 + mbexttok = MBEXTTOK_ORMBC;
1069 + return setcodeset(0);
1076 - if (!(syntax_bits & RE_DOT_NEWLINE))
1077 - clrbit('\n', ccl);
1078 - if (syntax_bits & RE_DOT_NOT_NULL)
1079 - clrbit('\0', ccl);
1080 + for (c2 = 0; c2 < NOTCHAR; ++c2)
1084 return lasttok = CSET + charclass_index(ccl);
1091 for (c2 = 0; c2 < NOTCHAR; ++c2)
1093 + if (!ISALNUM(c2) && !ismbchar(c2))
1097 + mbexttok = MBEXTTOK_ORMBC_NL;
1099 return lasttok = CSET + charclass_index(ccl);
1103 + unsigned char ch = 0, c2h = 0;
1105 /* Nobody ever said this had to be fast. :-)
1106 Note that if we're looking at some other [:...:]
1108 if (c == '\\' && (syntax_bits & RE_BACKSLASH_ESCAPE_IN_LISTS))
1109 FETCH(c, "Unbalanced [");
1110 + if (ismbchar(c)) {
1111 + ch = (unsigned char)c;
1112 + FETCH(c, "Multi-byte char incomplete");
1114 FETCH(c1, "Unbalanced [");
1116 @@ -616,19 +712,83 @@
1117 && (syntax_bits & RE_BACKSLASH_ESCAPE_IN_LISTS))
1118 FETCH(c2, "Unbalanced [");
1119 + if (ismbchar(c2)) {
1120 + c2h = (unsigned char)c2;
1121 + FETCH(c2, "Multi-byte char incomplete");
1123 FETCH(c1, "Unbalanced [");
1135 - setbit(tolower(c), ccl);
1136 - else if (ISLOWER(c))
1137 - setbit(toupper(c), ccl);
1140 + if (ch < c2h || (ch == c2h && c <= c2)) {
1142 + ch = (unsigned char)c2;
1145 + for (; (unsigned char)c <= ch; c++) {
1149 + setbit(tolower(c), ccl);
1150 + else if (ISLOWER(c))
1151 + setbit(toupper(c), ccl);
1158 + if (mbexttok < 0) {
1159 + mbexttok = MBEXTTOK_CLASS;
1160 + zeroset(mbcset_set);
1161 + zeroset(mbcset_all);
1163 + if (ch < c2h && c != 0x00) { /*
\e$B:G=i$NH>C<
\e(B */
1167 + && ((t = tstbit(ch, mbcset_set))
1168 + || !tstbit(ch, mbcset_all))) {
1170 + setbit(ch, mbcset_set);
1171 + zeroset(mbcset[ch - 0x80]);
1173 + for (; c < NOTCHAR; c++)
1174 + setbit(c, mbcset[ch - 0x80]);
1179 + if (ch < c2h || (ch == c2h && c == 0x00 && c2 == 0xff)) {
1180 + if (c == 0x00 && c2 == 0xff)
1182 + for (; ch < c2h; ch++)
1183 + if (ismbchar(ch)) {
1184 + clrbit(ch, mbcset_set);
1185 + setbit(ch, mbcset_all);
1187 + if (c == 0x00 && c2 == 0xff)
1194 + /*
\e$B$3$3$G$OI,$:
\e(B c <= c2
\e$B$H$J$C$F$$$k
\e(B. */
1196 + && ((t = tstbit(ch, mbcset_set))
1197 + || !tstbit(ch, mbcset_all))) {
1199 + setbit(ch, mbcset_set);
1200 + zeroset(mbcset[ch - 0x80]);
1202 + for (; c <= c2; c++)
1203 + setbit(c, mbcset[ch - 0x80]);
1210 @@ -640,5 +800,20 @@
1211 if (syntax_bits & RE_HAT_LISTS_NOT_NEWLINE)
1213 + if (mbexttok == MBEXTTOK_CLASS) {
1214 + mbexttok = MBEXTTOK_INVCLASS;
1215 + if (!isemptyset(mbcset_set)) {
1216 + for (c = 0x80; c <= 0xff; c++)
1217 + if (tstbit(c, mbcset_set))
1218 + notset(mbcset[c - 0x80]);
1220 + notset(mbcset_all);
1223 + mbexttok = MBEXTTOK_ORMBC_NL;
1225 + if (current_mbctype != MBCTYPE_ASCII)
1226 + for (c = 0x80; c <= 0xff; c++)
1230 return lasttok = CSET + charclass_index(ccl);
1234 + if (ismbchar(c)) {
1235 + FETCH(mbexttok, "Multi-byte char incomplete");
1238 if (case_fold && ISALPHA(c))
1240 @@ -746,5 +925,67 @@
1243 - if ((tok >= 0 && tok < NOTCHAR) || tok >= CSET || tok == BACKREF
1244 + if (mbexttok >= 0) {
1245 + if (mbexttok < MBEXTTOK_NOTCHAR) {
1251 + switch (mbexttok) {
1252 + case MBEXTTOK_ORMBC:
1253 + case MBEXTTOK_ORMBC_NL:
1255 + if (mbexttok == MBEXTTOK_ORMBC) {
1256 + addtok(setcodeset(1));
1257 + addtok(setcodeset(2));
1260 + addtok(setcodeset(5));
1261 + addtok(setcodeset(6));
1266 + case MBEXTTOK_CLASS:
1267 + case MBEXTTOK_INVCLASS:
1272 + if (!isemptyset(mbcset_set))
1273 + for (c = 0x80; c <= 0xff; c++)
1274 + if (tstbit(c, mbcset_set)) {
1275 + /* Make sure all bits in mbcset_all valid. */
1276 + clrbit(c, mbcset_all);
1278 + if (mbexttok == MBEXTTOK_CLASS) {
1279 + clrbit('\n', mbcset[c - 0x80]);
1280 + clrbit('\0', mbcset[c - 0x80]);
1283 + setbit('\n', mbcset[c - 0x80]);
1284 + setbit('\0', mbcset[c - 0x80]);
1286 + addtok(CSET + charclass_index(mbcset[c - 0x80]));
1290 + if (!isemptyset(mbcset_all)) {
1291 + addtok(CSET + charclass_index(mbcset_all));
1292 + if (mbexttok == MBEXTTOK_CLASS)
1293 + addtok(setcodeset(2));
1295 + addtok(setcodeset(6));
1306 + else if ((tok >= 0 && tok < NOTCHAR) || tok >= CSET || tok == BACKREF
1307 || tok == BEGLINE || tok == ENDLINE || tok == BEGWORD
1308 || tok == ENDWORD || tok == LIMWORD || tok == NOTLIMWORD)
1309 @@ -1904,4 +2145,6 @@
1313 + bzero(cs_tok, sizeof cs_tok);
1316 @@ -1916,8 +2159,8 @@
1317 if (case_fold) /* dummy folding in service of dfamust() */
1323 - copy = malloc(len);
1324 + p = copy = malloc(len + 7);
1326 dfaerror("out of memory");
1327 @@ -1925,23 +2168,61 @@
1328 /* This is a kludge. */
1330 + if (current_mbctype != MBCTYPE_ASCII && searchflag) {
1334 + if (!(syntax_bits & RE_NO_BK_PARENS))
1338 for (i = 0; i < len; ++i)
1340 - copy[i] = tolower(s[i]);
1341 + *p++ = tolower((unsigned char)s[i]);
1345 + if (current_mbctype != MBCTYPE_ASCII && searchflag) {
1346 + if (!(syntax_bits & RE_NO_BK_PARENS))
1352 - dfaparse(copy, len, d);
1354 + dfaparse(copy, p - copy, d);
1356 d->cindex = d->tindex = d->depth = d->nleaves = d->nregexps = 0;
1357 + bzero(cs_tok, sizeof cs_tok);
1359 - dfaparse(s, len, d);
1360 + if (current_mbctype != MBCTYPE_ASCII && searchflag) {
1361 + bcopy(s, copy + (syntax_bits & RE_NO_BK_PARENS ? 4 : 5), len);
1362 + dfaparse(copy, p - copy, d);
1365 + dfaparse(s, len, d);
1366 dfaanalyze(d, searchflag);
1372 - dfaparse(s, len, d);
1373 + if (current_mbctype != MBCTYPE_ASCII && searchflag) {
1376 + p = copy = malloc(len + 7);
1380 + if (!(syntax_bits & RE_NO_BK_PARENS))
1385 + if (!(syntax_bits & RE_NO_BK_PARENS))
1388 + dfaparse(copy, p - copy, d);
1392 + dfaparse(s, len, d);
1394 dfaanalyze(d, searchflag);
1395 diff -ru2N grep-2.0/dfa.h grep+mb1.04/dfa.h
1396 --- grep-2.0/dfa.h Mon Apr 12 06:17:22 1993
1397 +++ grep+mb1.04/dfa.h Wed Jul 7 17:02:13 1993
1399 along with this program; if not, write to the Free Software
1400 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
1401 +/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
1402 + Last change: Jul. 7, 1993 by t^2 */
1404 /* Written June, 1988 by Mike Haertel */
1406 /* dfasyntax() takes two arguments; the first sets the syntax bits described
1407 earlier in this file, and the second sets the case-folding flag. */
1408 -extern void dfasyntax(int, int);
1409 +extern void dfasyntax(unsigned long, int);
1411 /* Compile the given string of the given length into the given struct dfa.
1412 diff -ru2N grep-2.0/getpagesize.h grep+mb1.04/getpagesize.h
1413 --- grep-2.0/getpagesize.h Fri May 21 14:18:58 1993
1414 +++ grep+mb1.04/getpagesize.h Sat Jul 10 02:19:10 1993
1416 +/* Multi-byte extension added Jul., 1993 by t^2 (Takahiro Tanimoto)
1417 + Last change: Jul. 10, 1993 by t^2 */
1421 #endif /* no EXEC_PAGESIZE */
1422 #else /* !HAVE_SYS_PARAM_H */
1424 #define getpagesize() 8192 /* punt totally */
1426 +#define getpagesize() 4096
1428 #endif /* !HAVE_SYS_PARAM_H */
1429 #endif /* no _SC_PAGESIZE */
1430 diff -ru2N grep-2.0/grep.c grep+mb1.04/grep.c
1431 --- grep-2.0/grep.c Sun May 23 14:52:52 1993
1432 +++ grep+mb1.04/grep.c Thu Jun 2 17:01:53 1994
1435 Written July 1992 by Mike Haertel. */
1436 +/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
1437 + Last change: Jun. 2, 1994 by t^2 */
1450 #include "getpagesize.h"
1456 cc = read(bufdesc, buffer + bufsalloc, bufalloc - bufsalloc);
1459 - buflim = buffer + bufsalloc + cc;
1461 + buflim = buffer + bufsalloc + (unsigned)cc;
1463 buflim = buffer + bufsalloc;
1464 @@ -332,10 +337,10 @@
1466 /* Internal variables to keep track of byte count, context, etc. */
1467 -static size_t totalcc; /* Total character count before bufbeg. */
1468 +static unsigned long totalcc; /* Total character count before bufbeg. */
1469 static char *lastnl; /* Pointer after last newline counted. */
1470 static char *lastout; /* Pointer after last character output;
1471 NULL if no character has been output
1472 or if it's conceptually before bufbeg. */
1473 -static size_t totalnl; /* Total newline count before lastnl. */
1474 +static unsigned long totalnl; /* Total newline count before lastnl. */
1475 static int pending; /* Pending lines of output. */
1480 - printf("%d%c", ++totalnl, sep);
1481 + printf("%lu%c", ++totalnl, sep);
1487 - if (fillbuf(save) < 0)
1488 + if (fillbuf(save) == -1)
1490 error(filename, errno);
1491 @@ -564,8 +569,10 @@
1494 -static char version[] = "GNU grep version 2.0";
1495 +static char version[] = "GNU grep version 2.0\
1496 + + multi-byte extension 1.04";
1499 - "usage: %s [-[[AB] ]<num>] [-[CEFGVchilnqsvwx]] [-[ef]] <expr> [<files...>]\n"
1500 + "usage: %s [-[[AB] ]<num>] [-[CEFGVchilnqsvwx]] [-W ctype=...]\n\
1501 + [-[ef]] <expr> [<files...>]\n"
1504 @@ -594,4 +601,32 @@
1507 +#ifndef HAVE_STRCASECMP
1511 +strcasecmp(const char *s1, const char *s2)
1517 + unsigned char c1, c2;
1519 + while ((c1 = *s1++)) {
1520 + if ((unsigned char)(c1 - 'A') <= (unsigned char)('Z' - 'A'))
1523 + if ((unsigned char)(c2 - 'A') <= (unsigned char)('Z' - 'A'))
1530 + return c1 - (unsigned char)*s2;
1537 @@ -607,7 +642,27 @@
1541 - if (prog && strrchr(prog, '/'))
1542 - prog = strrchr(prog, '/') + 1;
1543 + if ((prog = argv[0]) && prog[0]) {
1546 + static char progname[8 + 1];
1549 + for (p = prog; (c = *p++); )
1552 + || c == '\\' || c == ':'
1557 + for (p = progname; p < &progname[8] && (c = *prog++) && c != '.'; ) {
1558 + if ((unsigned char)(c - 'A') <= (unsigned char)('Z' - 'A'))
1563 + prog = argv[0] = progname;
1571 - while ((opt = getopt(argc, argv, "0123456789A:B:CEFGVX:bce:f:hiLlnqsvwxy"))
1572 + while ((opt = getopt(argc, argv, "0123456789A:B:CEFGVX:bce:f:hiLlnqsvwxyW:"))
1575 @@ -747,4 +802,19 @@
1580 + if (strcasecmp(optarg, "ctype=ASCII") == 0) {
1581 + mbcinit(MBCTYPE_ASCII);
1584 + if (strcasecmp(optarg, "ctype=EUC") == 0) {
1585 + mbcinit(MBCTYPE_EUC);
1588 + if (strcasecmp(optarg, "ctype=SJIS") == 0) {
1589 + mbcinit(MBCTYPE_SJIS);
1592 + fatal("unknown argument to -Wctype", 0);
1595 diff -ru2N grep-2.0/kwset.c grep+mb1.04/kwset.c
1596 --- grep-2.0/kwset.c Mon May 3 04:26:20 1993
1597 +++ grep+mb1.04/kwset.c Fri Jul 9 14:54:46 1993
1599 The author may be reached (Email) at the address mike@ai.mit.edu,
1600 or (US mail) as Mike Haertel c/o Free Software Foundation. */
1601 +/* Multi-byte extension added Jul, 1993 by t^2 (Takahiro Tanimoto)
1602 + Last change: Jul. 9, 1993 by t^2 */
1604 /* The algorithm implemented by these routines bears a startling resemblence
1609 + if (U(tp[-2]) == gc)
1611 for (i = 3; i <= len && U(tp[-i]) == U(sp[-i]); ++i)
1612 diff -ru2N grep-2.0/mbc.c grep+mb1.04/mbc.c
1613 --- grep-2.0/mbc.c Thu Jan 1 09:00:00 1970
1614 +++ grep+mb1.04/mbc.c Fri Jul 9 14:38:28 1993
1616 +/* Functions for multi-byte support.
1617 + Created for grep multi-byte extension Jul., 1993 by t^2 (Takahiro Tanimoto)
1618 + Last change: Jul. 9, 1993 by t^2 */
1621 +static const unsigned char mbctab_ascii[] = {
1622 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1623 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1624 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1625 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1626 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1627 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1628 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1629 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1630 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1631 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1632 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1633 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1634 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1635 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1636 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1637 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
1640 +static const unsigned char mbctab_euc[] = {
1641 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1642 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1643 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1644 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1645 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1646 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1647 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1648 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1649 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1650 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1651 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1652 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1653 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1654 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1655 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1656 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1659 +static const unsigned char mbctab_sjis[] = {
1660 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1661 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1662 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1663 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1664 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1665 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1666 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1667 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1668 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1669 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1670 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1671 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1672 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1673 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1674 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1675 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1679 +const unsigned char *mbctab = mbctab_euc;
1680 +int current_mbctype = MBCTYPE_EUC;
1683 +const unsigned char *mbctab = mbctab_sjis;
1684 +int current_mbctype = MBCTYPE_SJIS;
1686 +const unsigned char *mbctab = mbctab_ascii;
1687 +int current_mbctype = MBCTYPE_ASCII;
1693 +mbcinit(int mbctype)
1699 + switch (mbctype) {
1700 + case MBCTYPE_ASCII:
1701 + mbctab = mbctab_ascii;
1702 + current_mbctype = MBCTYPE_ASCII;
1705 + mbctab = mbctab_euc;
1706 + current_mbctype = MBCTYPE_EUC;
1708 + case MBCTYPE_SJIS:
1709 + mbctab = mbctab_sjis;
1710 + current_mbctype = MBCTYPE_SJIS;
1714 diff -ru2N grep-2.0/mbc.h grep+mb1.04/mbc.h
1715 --- grep-2.0/mbc.h Thu Jan 1 09:00:00 1970
1716 +++ grep+mb1.04/mbc.h Fri Jul 9 14:40:03 1993
1720 +/* Definitions for multi-byte support.
1721 + Created for grep multi-byte extension Jul., 1993 by t^2 (Takahiro Tanimoto)
1722 + Last change: Jul. 9, 1993 by t^2 */
1727 +#define const __const__
1728 +#define volatile __volatile__
1744 +#define MBCTYPE_ASCII 0
1745 +#define MBCTYPE_EUC 1
1746 +#define MBCTYPE_SJIS 2
1748 +extern const unsigned char *mbctab;
1749 +extern int current_mbctype;
1751 +void mbcinit _((int));
1753 +#define ismbchar(c) mbctab[(unsigned char)c]
1755 +#endif /* !MBC_H */
1756 diff -ru2N grep-2.0/obstack.h grep+mb1.04/obstack.h
1757 --- grep-2.0/obstack.h Sat May 22 11:55:23 1993
1758 +++ grep+mb1.04/obstack.h Sat Jul 10 04:47:06 1993
1760 along with this program; if not, write to the Free Software
1761 Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
1762 +/* Multi-byte extension added Jul., 1993 by t^2 (Takahiro Tanimoto)
1763 + Last change: Jul. 10, 1993 by t^2 */
1769 +#ifndef PTR_INT_TYPE
1771 #define PTR_INT_TYPE ptrdiff_t
1773 #define PTR_INT_TYPE long
1777 struct _obstack_chunk /* Lives at front of each chunk. */
1779 struct obstack /* control current object in current chunk */
1781 - long chunk_size; /* preferred size to allocate chunks in */
1782 + unsigned chunk_size; /* preferred size to allocate chunks in */
1783 struct _obstack_chunk* chunk; /* address of current struct obstack_chunk */
1784 char *object_base; /* address of object we are building */
1785 diff -ru2N grep-2.0/regex.c grep+mb1.04/regex.c
1786 --- grep-2.0/regex.c Fri May 21 14:11:40 1993
1787 +++ grep+mb1.04/regex.c Thu Aug 19 04:37:03 1993
1789 along with this program; if not, write to the Free Software
1790 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
1791 +/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
1792 + Last change: Aug. 19, 1993 by t^2 */
1794 /* AIX requires this to be the first thing in the file. */
1796 #define bcmp(s1, s2, n) memcmp ((s1), (s2), (n))
1798 +#ifdef HAVE_MEMMOVE
1800 -#define bcopy(s, d, n) memcpy ((d), (s), (n))
1801 +#define bcopy(s, d, n) memmove ((d), (s), (n))
1807 +bcopy (const void *s0, void *d0, size_t n)
1815 + const char *s = s0;
1831 /* Get the interface, including the syntax bits. */
1835 /* isalpha etc. are used for the character classes. */
1836 @@ -462,4 +492,19 @@
1840 +#define STORE_MBC(p, c) \
1841 + ((p)[0] = (unsigned char) ((c) >> 8), (p)[1] = (unsigned char) (c))
1842 +#define STORE_MBC_AND_INCR(p, c) \
1843 + (*(p)++ = (unsigned char) ((c) >> 8), *(p)++ = (unsigned char) (c))
1845 +#define EXTRACT_MBC(p) \
1846 + ((unsigned char) (p)[0] << 8 | (unsigned char) (p)[1])
1847 +#define EXTRACT_MBC_AND_INCR(p) \
1848 + ((p) += 2, (unsigned char) (p)[-2] << 8 | (unsigned char) (p)[-1])
1850 +#define EXTRACT_UNSIGNED(p) \
1851 + ((unsigned char) (p)[0] | (unsigned char) (p)[1] << 8)
1852 +#define EXTRACT_UNSIGNED_AND_INCR(p) \
1853 + ((p) += 2, (unsigned char) (p)[-2] | (unsigned char) (p)[-1] << 8)
1855 /* If DEBUG is defined, Regex prints many voluminous messages about what
1859 + if (ismbchar (*p) && 2 <= mcnt) {
1860 + printf ("/%.2s", (char *) p), p += 2, --mcnt;
1865 @@ -618,7 +667,14 @@
1872 + unsigned short i, size;
1874 + size = EXTRACT_UNSIGNED_AND_INCR (p);
1875 + for (i = 0; i < size; i++)
1876 + printf ("%.2s-%.2s", (char *) p, (char *) p + 2),
1883 printf ("not_bol: %d\t", bufp->not_bol);
1884 printf ("not_eol: %d\t", bufp->not_eol);
1885 - printf ("syntax: %d\n", bufp->syntax);
1886 + printf ("syntax: %lu\n", bufp->syntax);
1887 /* Perhaps we should print the translate table? */
1890 static boolean at_begline_loc_p (), at_endline_loc_p ();
1891 static boolean group_in_compile_stack ();
1893 static reg_errcode_t compile_range ();
1896 /* Fetch the next character in the uncompiled pattern---translating it
1898 do {if (p == pend) return REG_EEND; \
1899 c = (unsigned char) *p++; \
1900 - if (translate) c = translate[c]; \
1901 + if (translate && !ismbchar (c)) \
1902 + c = (unsigned char) translate[(unsigned char) c]; \
1906 `char *', to avoid warnings when a string constant is passed. But
1907 when we use a character as a subscript we must make it unsigned. */
1908 -#define TRANSLATE(d) (translate ? translate[(unsigned char) (d)] : (d))
1909 +#define TRANSLATE(d) (translate \
1910 + ? (unsigned char) translate[(unsigned char) (d)] \
1914 @@ -1075,4 +1136,159 @@
1915 || STREQ (string, "cntrl") || STREQ (string, "blank"))
1917 +/* Handle charset(_not)?.
1919 + Structure of charset(_not)? in compiled pattern.
1922 + unsinged char id; charset(_not)?
1923 + unsigned char sbc_size;
1924 + unsigned char sbc_map[sbc_size]; same as original up to here.
1925 + unsigned short mbc_size; number of intervals.
1927 + unsigned short beg; beginning of interval.
1928 + unsigned short end; end of interval.
1929 + } intervals[mbc_size];
1932 +static reg_errcode_t
1934 +set_list_bits (unsigned short c1, unsigned short c2,
1935 + reg_syntax_t syntax, unsigned char *b, const char *translate)
1937 +set_list_bits (c1, c2, syntax, b, translate)
1938 + unsigned short c1, c2;
1939 + reg_syntax_t syntax;
1941 + const char *translate;
1944 + unsigned char sbc_size = b[-1];
1945 + unsigned short mbc_size = EXTRACT_UNSIGNED (&b[sbc_size]);
1946 + unsigned short beg, end, upb;
1949 + return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
1950 + if (c1 < 1 << BYTEWIDTH) {
1952 + if (1 << BYTEWIDTH <= upb)
1953 + upb = (1 << BYTEWIDTH) - 1; /* The last single-byte char */
1954 + if (sbc_size <= upb / BYTEWIDTH) {
1955 + /* Allocate maximum size so it never happens again. */
1956 + /* NOTE: memcpy() would not work here. */
1957 + bcopy (&b[sbc_size], &b[(1 << BYTEWIDTH) / BYTEWIDTH], 2 + mbc_size*4);
1958 + bzero (&b[sbc_size], (1 << BYTEWIDTH) / BYTEWIDTH - sbc_size);
1959 + b[-1] = sbc_size = (1 << BYTEWIDTH) / BYTEWIDTH;
1962 + for (; c1 <= upb; c1++)
1963 + if (!ismbchar (c1))
1964 + SET_LIST_BIT (c1);
1967 + for (; c1 <= upb; c1++)
1968 + if (!ismbchar (c1))
1969 + SET_LIST_BIT (TRANSLATE (c1));
1970 + if (c2 < 1 << BYTEWIDTH)
1971 + return REG_NOERROR;
1972 + c1 = 0x8000; /* The first wide char */
1974 + b = &b[sbc_size + 2];
1977 +
\e$B!|
\e(B----------
\e$B!|
\e(B
\e$B!|
\e(B----------
\e$B!|
\e(B
1979 +
\e$B!{
\e(B----------------------
\e$B!|
\e(B
1981 +
\e$B>e?^$N$h$&$J6h4V$N%$%s%G%C%/%9
\e(B beg
\e$B$r7hDj$9$k
\e(B. */
1982 + for (beg = 0, upb = mbc_size; beg < upb; ) {
1983 + unsigned short mid = (beg + upb) >> 1;
1985 + if (c1 - 1 > EXTRACT_MBC (&b[mid*4 + 2]))
1992 +
\e$B!|
\e(B-------
\e$B!|
\e(B
\e$B!|
\e(B----------
\e$B!|
\e(B
1994 +
\e$B!|
\e(B---------------
\e$B!{
\e(B
1996 +
\e$B>e?^$N$h$&$J6h4V$N%$%s%G%C%/%9
\e(B end
\e$B$r7hDj$9$k
\e(B. */
1997 + for (end = beg, upb = mbc_size; end < upb; ) {
1998 + unsigned short mid = (end + upb) >> 1;
2000 + if (c2 >= EXTRACT_MBC (&b[mid*4]) - 1)
2007 + /*
\e$B4{B8$N6h4V$r>/$J$/$H$b
\e(B1
\e$B$DE}9g$9$k>l9g
\e(B,
2008 +
\e$B6h4V$N;OE@
\e(B,
\e$B=*E@$r=$@5$9$k
\e(B. */
2009 + if (c1 > EXTRACT_MBC (&b[beg*4]))
2010 + c1 = EXTRACT_MBC (&b[beg*4]);
2011 + if (c2 < EXTRACT_MBC (&b[end*4 - 2]))
2012 + c2 = EXTRACT_MBC (&b[end*4 - 2]);
2014 + if (end < mbc_size && end != beg + 1)
2015 + /*
\e$BDI2C$5$l$k6h4V$N8e$m$K4{B8$N6h4V$r0\F0$9$k
\e(B. */
2016 + /* NOTE: memcpy() would not work here. */
2017 + bcopy (&b[end*4], &b[(beg + 1)*4], (mbc_size - end)*4);
2018 + STORE_MBC (&b[beg*4 + 0], c1);
2019 + STORE_MBC (&b[beg*4 + 2], c2);
2020 + mbc_size += beg + 1 - end;
2021 + STORE_NUMBER (&b[-2], mbc_size);
2022 + return REG_NOERROR;
2027 +is_in_list (unsigned short c, const unsigned char *b)
2031 + const unsigned char *b;
2034 + unsigned short size;
2035 + int in = (re_opcode_t) b[-1] == charset_not;
2038 + if (c < 1 << BYTEWIDTH) {
2039 + if (c / BYTEWIDTH < size && b[c / BYTEWIDTH] & 1 << c % BYTEWIDTH)
2043 + unsigned short i, j;
2046 + size = EXTRACT_UNSIGNED (&b[-2]);
2049 +
\e$B!|
\e(B-------
\e$B!|
\e(B
\e$B!|
\e(B--------
\e$B!|
\e(B
2051 +
\e$B!{
\e(B----------------
\e$B!|
\e(B
2053 +
\e$B>e?^$N$h$&$J6h4V$N%$%s%G%C%/%9
\e(B i
\e$B$r7hDj$9$k
\e(B. */
2054 + for (i = 0, j = size; i < j; ) {
2055 + unsigned short k = (i + j) >> 1;
2057 + if (c > EXTRACT_MBC (&b[k*4 + 2]))
2062 + if (i < size && EXTRACT_MBC (&b[i*4]) <= c
2063 + /* [...]
\e$B$+$i
\e(B,
\e$BL58z$J%^%k%A%P%$%HJ8;z$r=|30$9$k
\e(B.
\e$B$3$3$G$O4JC1$N
\e(B
2064 +
\e$B$?$a#2%P%$%HL\$,
\e(B '\n'
\e$B$^$?$O
\e(B '\0'
\e$B$@$1$rL58z$H$7$?
\e(B. [^...]
2065 +
\e$B$N>l9g$O
\e(B,
\e$B5U$KL58z$J%^%k%A%P%$%HJ8;z$r%^%C%A$5$;$k
\e(B. */
2066 + && ((unsigned char) c != '\n' && (unsigned char) c != '\0'))
2072 /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
2073 Returns one of error codes defined in `regex.h', or zero for success.
2074 @@ -1385,4 +1601,6 @@
2076 boolean had_char_class = false;
2077 + unsigned short c, c1;
2078 + int last_char = -1;
2080 if (p == pend) return REG_EBRACK;
2081 @@ -1390,5 +1608,6 @@
2082 /* Ensure that we have enough space to push a charset: the
2083 opcode, the length count, and the bitset; 34 bytes in all. */
2084 - GET_BUFFER_SPACE (34);
2085 + /* + 2 + 4 for mbcharset(_not)? with just one interval. */
2086 + GET_BUFFER_SPACE (34 + 2 + 4);
2089 @@ -1407,5 +1626,5 @@
2091 /* Clear the whole map. */
2092 - bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
2093 + bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH + 2);
2095 /* charset_not matches newline according to a syntax bit. */
2096 @@ -1417,7 +1636,14 @@
2101 if (p == pend) return REG_EBRACK;
2104 + if ((size = EXTRACT_UNSIGNED (&b[(1 << BYTEWIDTH) / BYTEWIDTH])))
2105 + /* Ensure the space is enough to hold another interval
2106 + of multi-byte chars in charset(_not)?. */
2107 + GET_BUFFER_SPACE (32 + 2 + size*4 + 4);
2111 /* \ might escape characters inside [...] and [^...]. */
2112 @@ -1426,6 +1652,16 @@
2113 if (p == pend) return REG_EESCAPE;
2116 - SET_LIST_BIT (c1);
2117 + PATFETCH_RAW (c1);
2118 + if (ismbchar (c1)) {
2121 + PATFETCH_RAW (c2);
2122 + c1 = c1 << 8 | c2;
2123 + (void) set_list_bits (c1, c1, syntax, b, translate);
2127 + SET_LIST_BIT (TRANSLATE (c1));
2131 @@ -1442,4 +1678,11 @@
2134 + if (ismbchar (c)) {
2137 + PATFETCH_RAW (c2);
2141 /* Look ahead to see if it's a range when the last thing
2142 was a character: if this is a hyphen not at the
2143 @@ -1447,10 +1690,25 @@
2146 +#if 0 /* The original was: */
2147 && !(p - 2 >= pattern && p[-2] == '[')
2148 && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
2149 +#else /* I wonder why he did not write like this.
2150 + Have we got any problems? */
2156 - = compile_range (&p, pend, translate, syntax, b);
2157 + reg_errcode_t ret;
2159 + assert (last_char >= 0);
2160 + PATFETCH_RAW (c1);
2161 + if (ismbchar (c1)) {
2164 + PATFETCH_RAW (c2);
2165 + c1 = c1 << 8 | c2;
2167 + ret = set_list_bits (last_char, c1, syntax, b, translate);
2169 if (ret != REG_NOERROR) return ret;
2171 @@ -1461,7 +1719,15 @@
2173 /* Move past the `-'. */
2176 - ret = compile_range (&p, pend, translate, syntax, b);
2177 + PATFETCH_RAW (c1);
2179 + PATFETCH_RAW (c1);
2180 + if (ismbchar (c1)) {
2183 + PATFETCH_RAW (c2);
2184 + c1 = c1 << 8 | c2;
2186 + ret = set_list_bits (c, c1, syntax, b, translate);
2188 if (ret != REG_NOERROR) return ret;
2190 @@ -1474,5 +1740,5 @@
2191 char str[CHAR_CLASS_MAX_LENGTH + 1];
2197 @@ -1534,4 +1800,7 @@
2199 had_char_class = true;
2205 @@ -1540,7 +1809,13 @@
2208 +#if 0 /* The original was: */
2211 +#else /* I think this is the right way. */
2212 + SET_LIST_BIT (TRANSLATE ('['));
2213 + SET_LIST_BIT (TRANSLATE (':'));
2215 had_char_class = false;
2219 @@ -1548,5 +1823,6 @@
2221 had_char_class = false;
2223 + (void) set_list_bits (c, c, syntax, b, translate);
2227 @@ -1556,5 +1832,9 @@
2228 while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
2231 + if (b[-1] != (1 << BYTEWIDTH) / BYTEWIDTH)
2232 + bcopy (&b[(1 << BYTEWIDTH) / BYTEWIDTH], &b[b[-1]],
2233 + 2 + EXTRACT_UNSIGNED (&b[(1 << BYTEWIDTH) / BYTEWIDTH])*4);
2234 + b += b[-1] + 2 + EXTRACT_UNSIGNED (&b[b[-1]])*4;
2238 @@ -2023,5 +2303,6 @@
2239 not to translate; but if we don't translate it
2240 it will never match anything. */
2241 - c = TRANSLATE (c);
2242 + if (!ismbchar (c))
2243 + c = TRANSLATE (c);
2246 @@ -2032,4 +2313,11 @@
2247 /* Expects the character in `c'. */
2251 + if (ismbchar (c)) {
2256 /* If no exactn currently being built. */
2258 @@ -2039,5 +2327,6 @@
2260 /* We have only one byte following the exactn for the count. */
2261 - || *pending_exact == (1 << BYTEWIDTH) - 1
2262 + || *pending_exact >= (c1 ? (1 << BYTEWIDTH) - 2
2263 + : (1 << BYTEWIDTH) - 1)
2265 /* If followed by a repetition operator. */
2266 @@ -2059,4 +2348,8 @@
2271 + (*pending_exact)++;
2275 @@ -2184,5 +2477,5 @@
2276 at_endline_loc_p (p, pend, syntax)
2277 const char *p, *pend;
2279 + reg_syntax_t syntax;
2281 const char *next = p;
2282 @@ -2220,4 +2513,5 @@
2285 +#if 0 /* We use set_list_bits() now. */
2286 /* Read the ending character of a range (in a bracket expression) from the
2287 uncompiled pattern *P_PTR (which ends at PEND). We assume the
2288 @@ -2275,4 +2569,5 @@
2293 /* Failure stack declarations and macros; both re_compile_fastmap and
2294 @@ -2638,18 +2933,65 @@
2297 + /* NOTE: Charset for single-byte chars never contain
2298 + multi-byte char. See set_list_bits(). */
2299 for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
2300 if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
2303 + unsigned short size;
2304 + unsigned char c, end;
2307 + size = EXTRACT_UNSIGNED (&p[-2]);
2308 + for (j = 0; j < size; j++)
2309 + /* set bits for 1st bytes of multi-byte chars. */
2310 + for (c = (unsigned char) p[j*4],
2311 + end = (unsigned char) p[j*4 + 2];
2313 + /* NOTE: Charset for multi-byte chars might contain
2314 + single-byte chars. We must reject them. */
2322 + /* S: set of all single-byte chars.
2323 + M: set of all first bytes that can start multi-byte chars.
2324 + s: any set of single-byte chars.
2325 + m: any set of first bytes that can start multi-byte chars.
2327 + We assume S+M = U.
2329 + s+m = (S*s+M*m). */
2330 /* Chars beyond end of map must be allowed. */
2331 + /* NOTE: Charset_not for single-byte chars might contain
2332 + multi-byte chars. See set_list_bits(). */
2333 for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
2335 + if (!ismbchar (j))
2338 for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
2339 if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
2341 + if (!ismbchar (j))
2344 + unsigned short size;
2345 + unsigned short c, beg;
2348 + size = EXTRACT_UNSIGNED (&p[-2]);
2350 + for (j = 0; j < size; j++) {
2351 + for (beg = (unsigned char) p[j*4 + 0]; c <= beg; c++)
2354 + c = (unsigned char) p[j*4 + 2];
2356 + for (beg = 0xff; c <= beg; c++)
2362 @@ -2964,4 +3306,5 @@
2363 register int lim = 0;
2367 if (startpos < size1 && startpos + range >= size1)
2368 @@ -2973,11 +3316,23 @@
2371 - while (range > lim
2372 - && !fastmap[(unsigned char)
2373 - translate[(unsigned char) *d++]])
2374 + while (range > lim) {
2376 + if (ismbchar (c)) {
2383 + if (fastmap[(unsigned char) translate[c]])
2388 - while (range > lim && !fastmap[(unsigned char) *d++])
2389 + while (range > lim && (c = *d++, !fastmap[c])) {
2395 startpos += irange - range;
2396 @@ -3012,11 +3367,34 @@
2401 + const char *d = ((startpos >= size1 ? string2 - size1 : string1)
2404 + if (ismbchar (*d)) {
2405 + range--, startpos++;
2409 + range--, startpos++;
2415 + range++, startpos--;
2417 + const char *s, *d, *p;
2419 + if (startpos < size1)
2420 + s = string1, d = string1 + startpos;
2422 + s = string2, d = string2 + startpos - size1;
2423 + for (p = d; p-- > s && ismbchar(*p); )
2424 + /* --p >= s
\e$B$@$H
\e(B 80[12]?86
\e$B$GF0$+$J$$2DG=@-$,$"$k
\e(B. (huge
2425 + model
\e$B0J30$G
\e(B, s
\e$B$N%*%U%;%C%H$,
\e(B 0
\e$B$@$C$?>l9g
\e(B.) */
2427 + if (!((d - p) & 1)) {
2430 + range++, startpos--;
2435 @@ -3578,6 +3956,19 @@
2441 - if (translate[(unsigned char) *d++] != (char) *p++)
2443 + if (ismbchar (c)) {
2444 + if (c != (unsigned char) *p++
2445 + || !--mcnt /*
\e$B%Q%?!<%s$,@5$7$/%3%s%Q%$%k$5
\e(B
2446 +
\e$B$l$F$$$k8B$j
\e(B,
\e$B$3$N%A%'%C%/$O
\e(B
2447 +
\e$B>iD9$@$,G0$N$?$a
\e(B. */
2449 + || (unsigned char) *d++ != (unsigned char) *p++)
2453 + if ((unsigned char) translate[c] != (unsigned char) *p++)
2456 @@ -3588,6 +3979,26 @@
2460 + /*
\e$BB>$NItJ,$G$O
\e(B, string1
\e$B$H
\e(B string2
\e$B$K%^%k%A%P%$%HJ8;z
\e(B
2461 +
\e$B$,8Y$k$N$r5v$7$F$$$J$$
\e(B.
\e$B$3$N$3$H$rB.EY$r5>@7$K$7$F
\e(B
2462 +
\e$B$b%A%'%C%/$9$k>l9g$O
\e(B,
\e$B$3$3$H<!$N
\e(B `#if 0'
\e$B$r
\e(B `#if 1'
2463 +
\e$B$KJQ$($k$3$H
\e(B. */
2470 + if (ismbchar (c)) {
2471 + if (c != (unsigned char) *p++
2477 + if (c != (unsigned char) *p++) goto fail;
2479 if (*d++ != (char) *p++) goto fail;
2483 @@ -3602,4 +4013,14 @@
2486 + if (ismbchar (*d)) {
2487 + if (d + 1 == dend || d[1] == '\n' || d[1] == '\0')
2488 + /*
\e$BL58z$J%^%k%A%P%$%HJ8;z$K$O%^%C%A$5$;$J$$
\e(B.
\e$B$3$3$G$O
\e(B,
\e$B4J
\e(B
2489 +
\e$BC1$N$?$a#2%P%$%HL\$,
\e(B '\n', '\0'
\e$B$N$b$N$@$1$rL58z$H$9$k
\e(B. */
2491 + SET_REGS_MATCHED ();
2492 + DEBUG_PRINT2 (" Matched `%d'.\n", EXTRACT_MBC (&d[0]));
2497 if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
2498 @@ -3616,19 +4037,23 @@
2501 - register unsigned char c;
2502 - boolean not = (re_opcode_t) *(p - 1) == charset_not;
2503 + register unsigned short c;
2506 - DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
2507 + DEBUG_PRINT2 ("EXECUTING charset%s.\n",
2508 + (re_opcode_t) *(p - 1) == charset_not ? "_not" : "");
2511 - c = TRANSLATE (*d); /* The character to match. */
2512 + c = (unsigned char) *d;
2513 + if (ismbchar (c)) {
2515 + if (d + 1 != dend)
2516 + c |= (unsigned char) d[1];
2519 + c = TRANSLATE (c); /* The character to match. */
2521 - /* Cast to `unsigned' instead of `unsigned char' in case the
2522 - bit list is a full 32 bytes long. */
2523 - if (c < (unsigned) (*p * BYTEWIDTH)
2524 - && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
2526 + not = is_in_list (c, p);
2529 + p += 1 + *p + 2 + EXTRACT_UNSIGNED (&p[1 + *p])*4;
2531 if (!not) goto fail;
2532 @@ -3636,4 +4061,6 @@
2533 SET_REGS_MATCHED ();
2535 + if (d != dend && c >= 1 << BYTEWIDTH)
2539 @@ -3801,5 +4228,5 @@
2541 /* xx why this test? */
2542 - if ((int) old_regend[r] >= (int) regstart[r])
2543 + if (old_regend[r] >= regstart[r])
2544 regend[r] = old_regend[r];
2546 @@ -4052,5 +4479,5 @@
2547 || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
2549 - register unsigned char c
2550 + register unsigned short c
2551 = *p2 == (unsigned char) endline ? '\n' : p2[2];
2553 @@ -4069,13 +4496,10 @@
2554 || (re_opcode_t) p1[3] == charset_not)
2556 - int not = (re_opcode_t) p1[3] == charset_not;
2558 - if (c < (unsigned char) (p1[4] * BYTEWIDTH)
2559 - && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
2562 + c = c << 8 | p2[3];
2564 - /* `not' is equal to 1 if c would match, which means
2565 + /* `is_in_list()' is TRUE if c would match, which means
2566 that we can't change to pop_failure_jump. */
2568 + if (!is_in_list (c, p1 + 4))
2570 p[-3] = (unsigned char) pop_failure_jump;
2571 @@ -4632,8 +5056,15 @@
2574 - register unsigned char *p1 = s1, *p2 = s2;
2575 + register unsigned char *p1 = s1, *p2 = s2, c;
2578 - if (translate[*p1++] != translate[*p2++]) return 1;
2580 + if (ismbchar(c)) {
2581 + if (c != *p2++ || !--len || *p1++ != *p2++)
2585 + if (translate[c] != translate[*p2++])
2589 @@ -4778,5 +5209,5 @@
2593 + reg_syntax_t syntax
2594 = (cflags & REG_EXTENDED) ?
2595 RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
2596 diff -ru2N grep-2.0/regex.h grep+mb1.04/regex.h
2597 --- grep-2.0/regex.h Fri May 21 14:11:43 1993
2598 +++ grep+mb1.04/regex.h Sat Jul 10 04:38:03 1993
2600 along with this program; if not, write to the Free Software
2601 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
2602 +/* Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)
2603 + Last change: Jul. 10, 1993 by t^2 */
2605 #ifndef __REGEXP_LIBRARY_H__
2607 the definitions shifted by one from the previous bit; thus, when we
2608 add or remove a bit, only one other definition need change. */
2609 -typedef unsigned reg_syntax_t;
2610 +typedef unsigned long reg_syntax_t;
2612 /* If this bit is not set, then \ inside a bracket expression is literal.
2613 If set, then such a \ quotes the following character. */
2614 -#define RE_BACKSLASH_ESCAPE_IN_LISTS (1)
2615 +#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long)1)
2617 /* If this bit is not set, then + and ? are operators, and \+ and \? are
2621 -#define RE_DUP_MAX ((1 << 15) - 1)
2622 +#define RE_DUP_MAX ((int)(((unsigned)1 << 15) - 1))
2625 @@ -397,4 +399,10 @@
2627 #define _RE_ARGS(args) ()
2630 +#define const __const__
2635 #endif /* not __STDC__ */
2636 diff -ru2N grep-2.0/search.c grep+mb1.04/search.c
2637 --- grep-2.0/search.c Mon May 3 06:02:00 1993
2638 +++ grep+mb1.04/search.c Fri Jul 9 14:55:21 1993
2641 Written August 1992 by Mike Haertel. */
2642 +/* Multi-byte extension added Jul., 1993 by t^2 (Takahiro Tanimoto)
2643 + Last change: Jul. 9, 1993 by t^2 */
2651 #define NCHAR (UCHAR_MAX + 1)
2655 - register char *beg, *try, *end;
2656 + register char *beg, *try, *end, *p, *lim;
2657 register size_t len;
2658 struct kwsmatch kwsmatch;
2661 for (beg = buf; beg <= buf + size; ++beg)
2664 if (try > buf && WCHAR((unsigned char) try[-1]))
2666 + for (p = try; p-- > lim && ismbchar(*p); )
2668 + if (!((try - p) & 1))
2670 if (try + len < buf + size && WCHAR((unsigned char) try[len]))
2672 @@ -464,6 +472,12 @@
2678 + for (p = beg; p-- > lim && ismbchar(*p); )
2680 + if ((beg - p) & 1)
2682 + if (lim + 1 < beg)
2687 diff -ru2N grep-2.0/tests/batgen.awk grep+mb1.04/tests/batgen.awk
2688 --- grep-2.0/tests/batgen.awk Thu Jan 1 09:00:00 1970
2689 +++ grep+mb1.04/tests/batgen.awk Sat Jul 10 02:10:24 1993
2691 +BEGIN { print "@echo off"; }
2692 +$0 !~ /^#/ && NF == 3 {
2693 + printf "echo #%d --\n", ++n
2695 + print "echo " $3 ">tmp.in";
2696 + print "grep -E -e \"" $2 "\" tmp.in >nul";
2697 + print "if errorlevel 1 set R=1";
2698 + print "if errorlevel 2 set R=2";
2699 + printf "if not %R% == " $1 " echo Spencer test #%d failed\n", n
2701 diff -ru2N grep-2.0/tests/check.bat grep+mb1.04/tests/check.bat
2702 --- grep-2.0/tests/check.bat Thu Jan 1 09:00:00 1970
2703 +++ grep+mb1.04/tests/check.bat Fri Jul 9 17:05:30 1993
2707 +rem Regression test for GNU e?grep.
2710 +rem The Khadafy test is brought to you by Scott Anderson . . .
2711 +grep -E -f tests/khadafy.reg tests/khadafy.lin > khadafy.out
2712 +fc tests\khadafy.lin khadafy.out
2714 +rem . . . and the following by Henry Spencer.
2716 +gawk -F: -f tests/batgen.awk tests/spencer.dos > tmp.bat
2719 diff -ru2N grep-2.0/tests/spencer.dos grep+mb1.04/tests/spencer.dos
2720 --- grep-2.0/tests/spencer.dos Thu Jan 1 09:00:00 1970
2721 +++ grep+mb1.04/tests/spencer.dos Sat Jul 10 02:12:59 1993
2820 +0:a([bc]*)(c*d):abcd
2821 +0:a([bc]+)(c*d):abcd
2822 +0:a([bc]*)(c+d):abcd
2823 +0:a[bcd]*dcdcde:adcdcde
2824 +1:a[bcd]+dcdcde:adcdcde
2826 +0:((a)(b)c)(d):abcd
2827 +0:[A-Za-z_][A-Za-z0-9_]*:alpha
2828 +0:^a(bc+|b[eh])g|.h$:abh
2829 +0:(bc+d$|ef*g.|h?i(j|k)):effgz
2830 +0:(bc+d$|ef*g.|h?i(j|k)):ij
2831 +1:(bc+d$|ef*g.|h?i(j|k)):effg
2832 +1:(bc+d$|ef*g.|h?i(j|k)):bcdd
2833 +0:(bc+d$|ef*g.|h?i(j|k)):reffgz
2834 +1:((((((((((a)))))))))):-
2835 +0:(((((((((a))))))))):a
2836 +1:multiple words of text:uh-uh
2837 +0:multiple words:multiple words, yeah
2843 +0:a[
\ 1-
\ 3]?c:a
\ 2c
2844 +0:(....).*\1:beriberi