Article View: comp.sources.reviewed
Article #25v02i029: mawk - (Ver. 1.1) An interpreter for the AWK language, Patch02b/4
From: Mike Brennan
Date: Tue, 13 Oct 1992 22:13
Date: Tue, 13 Oct 1992 22:13
2421 lines
64226 bytes
64226 bytes
Submitted-by: Mike Brennan <brennan@boeing.com>
Posting-number: Volume 2, Issue 29
Archive-name: mawk/patch02b
Patch-To: mawk: Volume 1, Issue 50-68
#!/bin/sh
# this is part.02 (part 2 of a multipart archive)
# do not concatenate these parts, unpack them in order with /bin/sh
# file diffs2 continued
#
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 2; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping diffs2'
else
echo 'x - continuing file diffs2'
sed 's/^X//' << 'SHAR_EOF' >> 'diffs2' &&
X sizes.h
! copyright 1991, Michael D. Brennan
X
X This is a source file for mawk, an implementation of
--- 2,6 ----
X /********************************************
X sizes.h
! copyright 1991, 1992. Michael D. Brennan
X
X This is a source file for mawk, an implementation of
***************
*** 11,18 ****
X ********************************************/
X
! /* $Log: sizes.h,v $
! * Revision 5.1 91/12/05 07:59:35 brennan
X * 1.1 pre-release
! *
X */
X
--- 11,21 ----
X ********************************************/
X
! /* $Log: sizes.h,v $
! * Revision 5.2 1992/08/27 03:20:08 mike
! * patch2: increase A_HASH_PRIME
! *
! * Revision 5.1 1991/12/05 07:59:35 brennan
X * 1.1 pre-release
! *
X */
X
***************
*** 23,27 ****
X
X #if ! HAVE_SMALL_MEMORY
! #define EVAL_STACK_SIZE 256 /* limit on recursion */
X /* number of fields at startup, must be a power of 2
X and FBANK_SZ-1 must be divisible by 3! */
--- 26,30 ----
X
X #if ! HAVE_SMALL_MEMORY
! #define EVAL_STACK_SIZE 256 /* initial size , can grow */
X /* number of fields at startup, must be a power of 2
X and FBANK_SZ-1 must be divisible by 3! */
***************
*** 50,54 ****
X
X #define HASH_PRIME 53
! #define A_HASH_PRIME 37
X
X
--- 53,62 ----
X
X #define HASH_PRIME 53
!
! #if ! HAVE_SMALL_MEMORY
! #define A_HASH_PRIME 199
! #else
! #define A_HASH_PRIME 37
! #endif
X
X
*** mawk/split.c Tue Mar 3 17:23:48 1992
--- mawk112/split.c Wed Jul 8 14:16:36 1992
***************
*** 11,18 ****
X ********************************************/
X
! /* $Log: split.c,v $
! * Revision 5.1 91/12/05 07:56:31 brennan
X * 1.1 pre-release
! *
X */
X
--- 11,24 ----
X ********************************************/
X
! /* $Log: split.c,v $
! * Revision 5.2 1992/07/08 21:19:09 brennan
! * patch2
! * change in split() requires that
! * bi_split() call load_array() even
! * when cnt is 0.
! *
! * Revision 5.1 1991/12/05 07:56:31 brennan
X * 1.1 pre-release
! *
X */
X
***************
*** 219,227 ****
X
X if ( string(sp)->len == 0 ) /* nothing to split */
! { free_STRING( string(sp) ) ;
! sp->type = C_DOUBLE ; sp->dval = 0.0 ;
! return sp ;
! }
!
X switch ( (sp+2)->type )
X {
--- 225,230 ----
X
X if ( string(sp)->len == 0 ) /* nothing to split */
! cnt = 0 ;
! else
X switch ( (sp+2)->type )
X {
*** mawk/symtype.h Tue Mar 3 17:23:48 1992
--- mawk112/symtype.h Wed Jul 8 08:41:15 1992
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: symtype.h,v $
! * Revision 5.1 91/12/05 07:59:37 brennan
X * 1.1 pre-release
! *
X */
X
--- 11,21 ----
X ********************************************/
X
! /*$Log: symtype.h,v $
! * Revision 5.2 1992/07/08 15:44:44 brennan
! * patch2: length returns. I am a wimp
! *
! * Revision 5.1 1991/12/05 07:59:37 brennan
X * 1.1 pre-release
! *
X */
X
***************
*** 111,117 ****
X #define ST_NR 7 /* NR is special */
X #define ST_ENV 8 /* and so is ENVIRON */
! #define ST_LOCAL_NONE 9
! #define ST_LOCAL_VAR 10
! #define ST_LOCAL_ARRAY 11
X
X #define is_local(stp) ((stp)->type>=ST_LOCAL_NONE)
--- 114,121 ----
X #define ST_NR 7 /* NR is special */
X #define ST_ENV 8 /* and so is ENVIRON */
! #define ST_LENGTH 9 /* ditto and bozo */
! #define ST_LOCAL_NONE 10
! #define ST_LOCAL_VAR 11
! #define ST_LOCAL_ARRAY 12
X
X #define is_local(stp) ((stp)->type>=ST_LOCAL_NONE)
*** mawk/types.h Tue Mar 3 17:23:50 1992
--- mawk112/types.h Tue Apr 7 12:56:39 1992
***************
*** 12,19 ****
X
X
! /* $Log: types.h,v $
! * Revision 5.1 91/12/05 07:59:39 brennan
X * 1.1 pre-release
! *
X */
X
--- 12,19 ----
X
X
! /* $Log: types.h,v $
! * Revision 5.1 1991/12/05 07:59:39 brennan
X * 1.1 pre-release
! *
X */
X
*** mawk/version.c Tue Mar 3 17:29:24 1992
--- mawk112/version.c Thu Aug 27 04:50:46 1992
***************
*** 2,6 ****
X /********************************************
X version.c
! copyright 1991, Michael D. Brennan
X
X This is a source file for mawk, an implementation of
--- 2,6 ----
X /********************************************
X version.c
! copyright 1991, 1992. Michael D. Brennan
X
X This is a source file for mawk, an implementation of
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: version.c,v $
! * Revision 5.3 92/03/03 16:42:23 brennan
X * patch 1
! *
X * Revision 5.2 92/01/22 05:34:10 brennan
X * version 1.1
--- 11,21 ----
X ********************************************/
X
! /*$Log: version.c,v $
! * Revision 5.4 1992/08/27 11:50:38 mike
! * patch2
! *
! * Revision 5.3 1992/03/03 16:42:23 brennan
X * patch 1
! *
X * Revision 5.2 92/01/22 05:34:10 brennan
X * version 1.1
***************
*** 27,31 ****
X
X #define VERSION_STRING \
! "mawk 1.1%s%s Feb 1992, Copyright (C) Michael D. Brennan\n\n"
X
X #define DOS_STRING ""
--- 30,34 ----
X
X #define VERSION_STRING \
! "mawk 1.1%s%s Aug 1992, Copyright (C) Michael D. Brennan\n\n"
X
X #define DOS_STRING ""
*** mawk/zmalloc.c Tue Mar 3 17:23:52 1992
--- mawk112/zmalloc.c Tue Apr 7 12:56:40 1992
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: zmalloc.c,v $
! * Revision 5.1 91/12/05 07:56:35 brennan
X * 1.1 pre-release
! *
X */
X
--- 11,18 ----
X ********************************************/
X
! /*$Log: zmalloc.c,v $
! * Revision 5.1 1991/12/05 07:56:35 brennan
X * 1.1 pre-release
! *
X */
X
*** mawk/zmalloc.h Tue Mar 3 17:23:52 1992
--- mawk112/zmalloc.h Tue Apr 7 12:56:41 1992
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: zmalloc.h,v $
! * Revision 5.1 91/12/05 07:59:41 brennan
X * 1.1 pre-release
! *
X */
X
--- 11,18 ----
X ********************************************/
X
! /*$Log: zmalloc.h,v $
! * Revision 5.1 1991/12/05 07:59:41 brennan
X * 1.1 pre-release
! *
X */
X
*** mawk/config/Idefault.h Tue Mar 3 17:29:32 1992
--- mawk112/config/Idefault.h Wed Jul 8 09:13:16 1992
***************
*** 12,16 ****
X
X
! /* $Log: Idefault.h,v $
X * Revision 3.13 92/03/03 16:40:56 brennan
X * remove HAVE_PRINTF_HD
--- 12,22 ----
X
X
! /* $Log: Idefault.h,v $
! * Revision 3.15 1992/07/08 16:16:08 brennan
! * don't attempt any #def or #undef with __STDC__
! *
! * Revision 3.14 1992/03/31 13:39:00 brennan
! * TURN_ON_FPE_TRAPS() macro
! *
X * Revision 3.13 92/03/03 16:40:56 brennan
X * remove HAVE_PRINTF_HD
***************
*** 186,189 ****
--- 192,199 ----
X #endif
X
+ #ifndef TURN_ON_FPE_TRAPS
+ #define TURN_ON_FPE_TRAPS() /* nothing */
+ #endif
+
X #ifndef HAVE_SMALL_MEMORY
X #define HAVE_SMALL_MEMORY 0
***************
*** 194,203 ****
X
X
! #ifndef __STDC__
! #define __STDC__ 0
! #endif
!
X #if __STDC__
-
X #undef HAVE_PROTOS
X #define HAVE_PROTOS 1
--- 204,209 ----
X
X
! #ifdef __STDC__
X #if __STDC__
X #undef HAVE_PROTOS
X #define HAVE_PROTOS 1
***************
*** 208,217 ****
X #undef HAVE_STRING_H
X #define HAVE_STRING_H 1
- #endif
-
- #if __STDC__ && ! __GNUC__
- /* with gcc __STDC__ can be defined, but stdlib.h is missing */
X #undef HAVE_STDLIB_H
X #define HAVE_STDLIB_H 1
X #endif
X
--- 214,220 ----
X #undef HAVE_STRING_H
X #define HAVE_STRING_H 1
X #undef HAVE_STDLIB_H
X #define HAVE_STDLIB_H 1
+ #endif
X #endif
X
***************
*** 218,222 ****
X
X
-
X /* the painfull case: we need to catch fpe's and look at errno
X after lib calls */
--- 221,224 ----
***************
*** 275,285 ****
X #endif
X
- /* ultrix pukes if __STDC__ is defined 0 */
- /* SCO UNIX's cc (from Microsoft) sneezes if __STDC__ is re-#define-d */
- #if (__STDC__ == 0)
- #ifndef M_I386
- #undef __STDC__
- #endif
- #endif
X
X /* for Think C on the Macintosh, sizeof(size_t) != sizeof(unsigned
--- 277,280 ----
*** mawk/config/V7.h Tue Mar 3 17:24:12 1992
--- mawk112/config/V7.h Tue Apr 7 12:56:53 1992
***************
*** 16,23 ****
X */
X
! /*$Log: V7.h,v $
! * Revision 4.2 91/11/21 13:30:34 brennan
! *
! *
X * 11/17/91 C. Mascott declare fprintf, sprintf on V7
X *
--- 16,22 ----
X */
X
! /*$Log: V7.h,v $
! * Revision 4.2 1991/11/21 13:30:34 brennan
! *
X * 11/17/91 C. Mascott declare fprintf, sprintf on V7
X *
*** mawk/config/atarist.h Tue Mar 3 17:24:18 1992
--- mawk112/config/atarist.h Tue Apr 7 12:56:56 1992
***************
*** 17,24 ****
X */
X
! /*$Log: atarist.h,v $
! * Revision 1.1 91/10/29 10:48:52 brennan
X * Initial revision
! *
X */
X
--- 17,24 ----
X */
X
! /*$Log: atarist.h,v $
! * Revision 1.1 1991/10/29 10:48:52 brennan
X * Initial revision
! *
X */
X
*** mawk/config/bsd43_vax.h Tue Mar 3 17:24:10 1992
--- mawk112/config/bsd43_vax.h Tue Apr 7 12:56:50 1992
***************
*** 12,19 ****
X
X
! /* $Log: bsd43_vax.h,v $
! * Revision 4.1 91/09/25 11:41:07 brennan
X * VERSION 1.0
! *
X * Revision 3.2 91/08/13 09:04:09 brennan
X * VERSION .9994
--- 12,19 ----
X
X
! /* $Log: bsd43_vax.h,v $
! * Revision 4.1 1991/09/25 11:41:07 brennan
X * VERSION 1.0
! *
X * Revision 3.2 91/08/13 09:04:09 brennan
X * VERSION .9994
*** mawk/config/generic.h Tue Mar 3 17:29:30 1992
--- mawk112/config/generic.h Tue Apr 7 12:56:48 1992
***************
*** 12,19 ****
X
X
! /* $Log: generic.h,v $
! * Revision 4.4 92/03/03 16:40:54 brennan
X * remove HAVE_PRINTF_HD
! *
X * Revision 4.3 91/10/29 10:48:26 brennan
X * version 1.09
--- 12,19 ----
X
X
! /* $Log: generic.h,v $
! * Revision 4.4 1992/03/03 16:40:54 brennan
X * remove HAVE_PRINTF_HD
! *
X * Revision 4.3 91/10/29 10:48:26 brennan
X * version 1.09
*** mawk/config/mips.h Tue Mar 3 17:24:20 1992
--- mawk112/config/mips.h Tue Apr 7 12:56:56 1992
***************
*** 10,17 ****
X ********************************************/
X
! /*$Log: mips.h,v $
! * Revision 1.2 91/11/15 08:13:20 brennan
X * declaration for sprintf
! *
X * Revision 1.1 91/10/28 09:58:05 brennan
X * Initial revision
--- 10,17 ----
X ********************************************/
X
! /*$Log: mips.h,v $
! * Revision 1.2 1991/11/15 08:13:20 brennan
X * declaration for sprintf
! *
X * Revision 1.1 91/10/28 09:58:05 brennan
X * Initial revision
*** mawk/config/msc_dos.h Tue Mar 3 17:24:16 1992
--- mawk112/config/msc_dos.h Tue Apr 7 12:56:55 1992
***************
*** 13,20 ****
X /* Microsoft C 6.0A under MSDOS */
X
! /*$Log: msc_dos.h,v $
! * Revision 4.3 92/01/09 08:54:09 brennan
X * changed SAMESEG macro
! *
X * Revision 4.2 91/10/29 09:36:59 brennan
X * Large model macro
--- 13,20 ----
X /* Microsoft C 6.0A under MSDOS */
X
! /*$Log: msc_dos.h,v $
! * Revision 4.3 1992/01/09 08:54:09 brennan
X * changed SAMESEG macro
! *
X * Revision 4.2 91/10/29 09:36:59 brennan
X * Large model macro
*** mawk/config/next.h Tue Mar 3 17:29:36 1992
--- mawk112/config/next.h Tue Apr 7 12:56:57 1992
***************
*** 14,21 ****
X */
X
! /* $Log: next.h,v $
! * Revision 1.1 92/02/25 08:13:12 brennan
X * Initial revision
! *
X */
X
--- 14,21 ----
X */
X
! /* $Log: next.h,v $
! * Revision 1.1 1992/02/25 08:13:12 brennan
X * Initial revision
! *
X */
X
*** mawk/config/sgi.h Tue Mar 3 17:29:38 1992
--- mawk112/config/sgi.h Tue Apr 7 12:56:57 1992
***************
*** 14,21 ****
X */
X
! /* $Log: sgi.h,v $
! * Revision 1.1 92/02/25 08:10:22 brennan
X * Initial revision
! *
X */
X
--- 14,21 ----
X */
X
! /* $Log: sgi.h,v $
! * Revision 1.1 1992/02/25 08:10:22 brennan
X * Initial revision
! *
X */
X
*** mawk/config/sun_os40.h Tue Mar 3 17:24:10 1992
--- mawk112/config/sun_os40.h Tue Apr 7 12:56:51 1992
***************
*** 12,19 ****
X
X
! /* $Log: sun_os40.h,v $
! * Revision 4.2 91/11/17 12:34:11 brennan
X * added a declaration for sprintf()
! *
X * Revision 4.1 91/09/25 11:41:35 brennan
X * VERSION 1.0
--- 12,19 ----
X
X
! /* $Log: sun_os40.h,v $
! * Revision 4.2 1991/11/17 12:34:11 brennan
X * added a declaration for sprintf()
! *
X * Revision 4.1 91/09/25 11:41:35 brennan
X * VERSION 1.0
*** mawk/config/sun_os41.h Tue Mar 3 17:24:10 1992
--- mawk112/config/sun_os41.h Tue Jul 7 08:42:39 1992
***************
*** 2,6 ****
X /********************************************
X sun_os41.h
! copyright 1991, Michael D. Brennan
X
X This is a source file for mawk, an implementation of
--- 2,6 ----
X /********************************************
X sun_os41.h
! copyright 1991, 1992. Michael D. Brennan
X
X This is a source file for mawk, an implementation of
***************
*** 12,19 ****
X
X
! /* $Log: sun_os41.h,v $
! * Revision 1.3 91/12/05 08:24:02 brennan
X * 1.1 pre-release
! *
X */
X
--- 12,22 ----
X
X
! /* $Log: sun_os41.h,v $
! * Revision 1.4 1992/07/07 15:45:58 brennan
! * <stdlib.h> is non-standard
! *
! * Revision 1.3 1991/12/05 08:24:02 brennan
X * 1.1 pre-release
! *
X */
X
***************
*** 23,26 ****
--- 26,32 ----
X /* this is missing (actually its in 5include) */
X int fprintf() ;
+
+ /* this is not in <stdlib.h> */
+ double strtod() ;
X
X
*** mawk/config/sysV.h Tue Mar 3 17:24:14 1992
--- mawk112/config/sysV.h Tue Apr 7 12:56:54 1992
***************
*** 24,31 ****
X */
X
! /*$Log: sysV.h,v $
! * Revision 4.1 91/09/25 11:41:40 brennan
X * VERSION 1.0
! *
X * Revision 1.2 91/08/13 09:04:15 brennan
X * VERSION .9994
--- 24,31 ----
X */
X
! /*$Log: sysV.h,v $
! * Revision 4.1 1991/09/25 11:41:40 brennan
X * VERSION 1.0
! *
X * Revision 1.2 91/08/13 09:04:15 brennan
X * VERSION .9994
*** mawk/config/sysV_ieeefp.h Tue Mar 3 17:24:14 1992
--- mawk112/config/sysV_ieeefp.h Tue Apr 7 12:56:54 1992
***************
*** 12,19 ****
X
X
! /* $Log: sysV_ieeefp.h,v $
! * Revision 4.1 91/09/25 11:41:45 brennan
X * VERSION 1.0
! *
X * Revision 1.3 91/09/10 09:19:41 brennan
X * fixed comment typo
--- 12,19 ----
X
X
! /* $Log: sysV_ieeefp.h,v $
! * Revision 4.1 1991/09/25 11:41:45 brennan
X * VERSION 1.0
! *
X * Revision 1.3 91/09/10 09:19:41 brennan
X * fixed comment typo
*** mawk/config/tcc_dos.h Tue Mar 3 17:24:12 1992
--- mawk112/config/tcc_dos.h Tue Apr 7 12:56:52 1992
***************
*** 13,20 ****
X /* Turbo C under MSDOS */
X
! /* $Log: tcc_dos.h,v $
! * Revision 4.2 91/10/29 09:37:54 brennan
X * changes for 1.09
! *
X * Revision 4.1 91/09/25 11:41:51 brennan
X * VERSION 1.0
--- 13,20 ----
X /* Turbo C under MSDOS */
X
! /* $Log: tcc_dos.h,v $
! * Revision 4.2 1991/10/29 09:37:54 brennan
X * changes for 1.09
! *
X * Revision 4.1 91/09/25 11:41:51 brennan
X * VERSION 1.0
*** mawk/config/ultrix42mips.h Tue Mar 3 17:29:36 1992
--- mawk112/config/ultrix42mips.h Tue Apr 7 12:56:50 1992
***************
*** 12,19 ****
X
X
! /* $Log: ultrix42mips.h,v $
! * Revision 1.1 92/03/03 12:35:21 brennan
X * Initial revision
! *
X */
X
--- 12,19 ----
X
X
! /* $Log: ultrix42mips.h,v $
! * Revision 1.1 1992/03/03 12:35:21 brennan
X * Initial revision
! *
X */
X
*** mawk/config/ultrix_vax.h Tue Mar 3 17:24:08 1992
--- mawk112/config/ultrix_vax.h Tue Apr 7 12:56:49 1992
***************
*** 12,19 ****
X
X
! /* $Log: ultrix_vax.h,v $
! * Revision 4.1 91/09/25 11:42:07 brennan
X * VERSION 1.0
! *
X * Revision 3.2 91/08/13 09:04:23 brennan
X * VERSION .9994
--- 12,19 ----
X
X
! /* $Log: ultrix_vax.h,v $
! * Revision 4.1 1991/09/25 11:42:07 brennan
X * VERSION 1.0
! *
X * Revision 3.2 91/08/13 09:04:23 brennan
X * VERSION .9994
*** mawk/config/xenix_r2.h Tue Mar 3 17:24:14 1992
--- mawk112/config/xenix_r2.h Tue Apr 7 12:56:53 1992
***************
*** 24,31 ****
X */
X
! /*$Log: xenix_r2.h,v $
! * Revision 4.1 91/09/25 11:42:13 brennan
X * VERSION 1.0
! *
X * Revision 1.2 91/08/13 09:04:24 brennan
X * VERSION .9994
--- 24,31 ----
X */
X
! /*$Log: xenix_r2.h,v $
! * Revision 4.1 1991/09/25 11:42:13 brennan
X * VERSION 1.0
! *
X * Revision 1.2 91/08/13 09:04:24 brennan
X * VERSION .9994
*** mawk/man/mawk.1 Tue Mar 3 17:23:54 1992
--- mawk112/man/mawk.1 Wed Aug 26 21:14:36 1992
***************
*** 1,3 ****
! .TH MAWK 1 "Jan 22 1992" "Version 1.1" "USER COMMANDS"
X .\" strings
X .ds ex \fIexpr\fR
--- 1,3 ----
! .TH MAWK 1 "Jul 13 1992" "Version 1.1.2" "USER COMMANDS"
X .\" strings
X .ds ex \fIexpr\fR
***************
*** 4,8 ****
X .SH NAME
X mawk \- pattern scanning and text processing language
-
X .SH SYNOPSIS
X .B mawk
--- 4,7 ----
***************
*** 25,29 ****
X .IR program-file ]
X [\-\|\-] [file ...]
-
X .SH DESCRIPTION
X .B mawk
--- 24,27 ----
***************
*** 47,51 ****
X .B mawk
X provides a small number of extensions.
!
X An AWK program is a sequence of \fIpattern {action}\fR pairs and
X function definitions.
--- 45,49 ----
X .B mawk
X provides a small number of extensions.
! .PP
X An AWK program is a sequence of \fIpattern {action}\fR pairs and
X function definitions.
***************
*** 60,64 ****
X record separator variable, \fBRS\fR. Initially,
X .B RS
! = "\\n" and records are synonymous with lines.
X Each record is compared against each
X .I pattern
--- 58,62 ----
X record separator variable, \fBRS\fR. Initially,
X .B RS
! = "\en" and records are synonymous with lines.
X Each record is compared against each
X .I pattern
***************
*** 66,82 ****
X .I "{action}"
X is executed.
-
X .SH OPTIONS
!
! .TP \w'\-\fBv'+\w'\fIvar=value'u+2n
! \-\fBF \fIvalue
X sets the field separator, \fBFS\fR, to
X .IR value .
!
! .IP "\-\fBf \fIfile"
X Program text is read from \fIfile\fR instead of from the
! command line. Multiple \-f options are allowed.
!
! .IP "\-\fBv \fIvar=value"
X assigns
X .I value
--- 64,80 ----
X .I "{action}"
X is executed.
X .SH OPTIONS
! .TP \w'\-\fBW'u+\w'\fRsprintf=\fInum\fR'u+2n
! \-\fBF \fIvalue\fP
X sets the field separator, \fBFS\fR, to
X .IR value .
! .TP
! \-\fBf \fIfile
X Program text is read from \fIfile\fR instead of from the
! command line. Multiple
! .B \-f
! options are allowed.
! .TP
! \-\fBv \fIvar=value\fR
X assigns
X .I value
***************
*** 83,88 ****
X to program variable
X .IR var .
!
! .IP "\-\|\-"
X indicates the unambiguous end of options.
X .PP
--- 81,86 ----
X to program variable
X .IR var .
! .TP
! \-\|\-
X indicates the unambiguous end of options.
X .PP
***************
*** 89,97 ****
X The above options will be available with any Posix compatible
X implementation of AWK, and implementation specific options are
! prefaced with \-W.
X .B mawk
! provides three:
!
! .TP \w'\-\fBv'+\w'\fIvar=value'u+2n
X \-\fBW \fRversion
X .B mawk
--- 87,95 ----
X The above options will be available with any Posix compatible
X implementation of AWK, and implementation specific options are
! prefaced with
! .BR \-W .
X .B mawk
! provides four:
! .TP \w'\-\fBW'u+\w'\fRsprintf=\fInum\fR'u+2n
X \-\fBW \fRversion
X .B mawk
***************
*** 104,108 ****
X representation of the program to stderr.
X .TP
! \-\fBW \fRsprintf=\fInum
X adjusts the size of
X .B mawk's
--- 102,106 ----
X representation of the program to stderr.
X .TP
! \-\fBW \fRsprintf=\fInum\fR
X adjusts the size of
X .B mawk's
***************
*** 116,121 ****
X forces
X .B mawk
! not to consider '\\n' to be space.
!
X .SH "THE AWK LANGUAGE"
X .SS "\fB1. Program structure"
--- 114,118 ----
X forces
X .B mawk
! not to consider '\en' to be space.
X .SH "THE AWK LANGUAGE"
X .SS "\fB1. Program structure"
***************
*** 152,156 ****
X have no meaning; an empty statement is terminated with a
X semi-colon. Long statements
! can be continued with a backslash, \\\|. A statement can be broken
X without a backslash after a comma, left brace, &&, ||,
X .BR do ,
--- 149,153 ----
X have no meaning; an empty statement is terminated with a
X semi-colon. Long statements
! can be continued with a backslash, \e\|. A statement can be broken
X without a backslash after a comma, left brace, &&, ||,
X .BR do ,
***************
*** 218,241 ****
X .sp
X .ce
! "This is a string with a newline at the end.\\n"
X .sp
! Strings can be continued across a line by escaping (\\) the newline.
X The following escape sequences are recognized.
X .nf
X .sp
! \\\\ \\
! \\" "
! \\a alert, ascii 7
! \\b backspace, ascii 8
! \\t tab, ascii 9
! \\n newline, ascii 10
! \\v vertical tab, ascii 11
! \\f formfeed, ascii 12
! \\r carriage return, ascii 13
! \\ddd 1, 2 or 3 octal digits for ascii ddd
! \\xhh 1 or 2 hex digits for ascii hh
X .sp
X .fi
! If you escape any other character \\c, you get \\c, i.e.,
X .B mawk
X ignores the escape.
--- 215,238 ----
X .sp
X .ce
! "This is a string with a newline at the end.\en"
X .sp
! Strings can be continued across a line by escaping (\e) the newline.
X The following escape sequences are recognized.
X .nf
X .sp
! \e\e \e
! \e" "
! \ea alert, ascii 7
! \eb backspace, ascii 8
! \et tab, ascii 9
! \en newline, ascii 10
! \ev vertical tab, ascii 11
! \ef formfeed, ascii 12
! \er carriage return, ascii 13
! \eddd 1, 2 or 3 octal digits for ascii ddd
! \exhh 1 or 2 hex digits for ascii hh
X .sp
X .fi
! If you escape any other character \ec, you get \ec, i.e.,
X .B mawk
X ignores the escape.
***************
*** 296,306 ****
X \*(ex\d1\u \fBrel-op \*(ex\d2\u,
X if both operands are numeric or number and string then the comparison
! is numeric; if both operands are string the comparison is string.
! If exactly one operand is string and after trimming spaces and
! tabs from the front and back the remaining string is entirely
! numeric in form, then the string is converted to number and the
! comparison is numeric; otherwise, the numeric operand is converted
! to string and the comparison is string.
! The result of a comparison is numeric, 0 or 1.
X .PP
X In boolean contexts such as,
--- 293,299 ----
X \*(ex\d1\u \fBrel-op \*(ex\d2\u,
X if both operands are numeric or number and string then the comparison
! is numeric; if both operands are string the comparison is string;
! if one operand is string, the non-string operand is converted and
! the comparison is string. The result is numeric, 1 or 0.
X .PP
X In boolean contexts such as,
***************
*** 360,364 ****
X matches any non-metacharacter
X .IR c .
! .IP "\e\fIc\fR"
X matches a character defined by the same escape sequences used
X in string constants or the literal
--- 353,358 ----
X matches any non-metacharacter
X .IR c .
! .TP
! "\e\fIc\fR"
X matches a character defined by the same escape sequences used
X in string constants or the literal
***************
*** 366,372 ****
X .I c
X if
! \\\fIc\fR
X is not an escape sequence.
! .IP \.
X matches any character (including newline).
X .TP
--- 360,367 ----
X .I c
X if
! \e\fIc\fR
X is not an escape sequence.
! .TP
! \&\.
X matches any character (including newline).
X .TP
***************
*** 390,394 ****
X as follows:
X .RS
! .TP
X \fIr\fR\d1\u\fIr\fR\d2\u
X matches
--- 385,389 ----
X as follows:
X .RS
! .TP \w'[^c\d1\uc\d2\uc\d3\u...]'u+1n
X \fIr\fR\d1\u\fIr\fR\d2\u
X matches
***************
*** 425,429 ****
X .sp
X /^[_a\-zA-Z][_a\-zA\-Z0\-9]*$/ and
! /^[\-+]?([0\-9]+\\\|.?|\\\|.[0\-9])[0\-9]*([eE][\-+]?[0\-9]+)?$/
X .sp
X .fi
--- 420,424 ----
X .sp
X /^[_a\-zA-Z][_a\-zA\-Z0\-9]*$/ and
! /^[\-+]?([0\-9]+\e\|.?|\e\|.[0\-9])[0\-9]*([eE][\-+]?[0\-9]+)?$/
X .sp
X .fi
***************
*** 513,517 ****
X echo 24 24E |
X mawk '{ print($1>100, $1>"100", $2>100, $2>"100") }'
! 0 0 1 1
X .fi
X .sp
--- 508,512 ----
X echo 24 24E |
X mawk '{ print($1>100, $1>"100", $2>100, $2>"100") }'
! 0 1 1 1
X .fi
X .sp
***************
*** 521,529 ****
X are string and
X .B $1
! is number and string. The first
! and second comparisons are numeric and the last
! two are string. In the second "100" is
! converted to 100, and in the third 100 is
! converted to "100".
X .\"
X .SS "\fB5. Expressions and operators"
--- 516,523 ----
X are string and
X .B $1
! is number and string. The first comparison is numeric,
! the second is string, the third is string
! (100 is converted to "100"),
! and the last is string.
X .\"
X .SS "\fB5. Expressions and operators"
***************
*** 672,676 ****
X .TP
X .B ORS
! terminates each record on output, initially = "\\n".
X .TP
X .B RLENGTH
--- 666,670 ----
X .TP
X .B ORS
! terminates each record on output, initially = "\en".
X .TP
X .B RLENGTH
***************
*** 679,683 ****
X .TP
X .B RS
! input record separator, initially = "\\n".
X .TP
X .B RSTART
--- 673,677 ----
X .TP
X .B RS
! input record separator, initially = "\en".
X .TP
X .B RSTART
***************
*** 686,690 ****
X .TP
X .B SUBSEP
! used to build multiple array subscripts, initially = "\\034".
X .RE
X .\"
--- 680,684 ----
X .TP
X .B SUBSEP
! used to build multiple array subscripts, initially = "\e034".
X .RE
X .\"
***************
*** 709,713 ****
X is replaced by the matched substring of
X .IR t .
! \\& puts a literal & in the replacement string.
X .TP
X index(\fIs,t\fR)
--- 703,707 ----
X is replaced by the matched substring of
X .IR t .
! \e& puts a literal & in the replacement string.
X .TP
X index(\fIs,t\fR)
***************
*** 723,731 ****
X is in position 1.
X .TP
! length(\fIs\fR) length()
X Returns the length of string
! .IR s ;
! without an argument, returns the length of
! .BR $0 .
X .TP
X match(\fIs,r\fR)
--- 717,723 ----
X is in position 1.
X .TP
! length(\fIs\fR)
X Returns the length of string
! .IR s .
X .TP
X match(\fIs,r\fR)
***************
*** 1036,1040 ****
X .B mawk
X defines <SPACE> as the regular expression
! /[\ \\t\\n]+/.
X Otherwise
X .I sep
--- 1028,1032 ----
X .B mawk
X defines <SPACE> as the regular expression
! /[\ \et\en]+/.
X Otherwise
X .I sep
***************
*** 1042,1046 ****
X are ignored for a string of length 1,
X e.g.,
! split(x, A, "*") and split(x, A, /\\*/) are the same.
X .TP
X (3)
--- 1034,1038 ----
X are ignored for a string of length 1,
X e.g.,
! split(x, A, "*") and split(x, A, /\e*/) are the same.
X .TP
X (3)
***************
*** 1049,1053 ****
X and
X .I A
! is unchanged.
X Otherwise,
X all non-overlapping, non-null and longest matches of
--- 1041,1045 ----
X and
X .I A
! is set empty.
X Otherwise,
X all non-overlapping, non-null and longest matches of
***************
*** 1119,1123 ****
X records are easy. Setting
X .B RS
! = "\\n\\n+", makes one or more blank
X lines separate records. If
X .B FS
--- 1111,1115 ----
X records are easy. Setting
X .B RS
! = "\en\en+", makes one or more blank
X lines separate records. If
X .B FS
***************
*** 1127,1138 ****
X .RS
X .PP
! For example, if a file is "a\ b\\nc\\n\\n",
X .B RS
! = "\\n\\n+" and
X .B FS
! = "\ ", then there is one record "a\ b\\nc" with three
X fields "a", "b" and "c". Changing
X .B FS
! = "\\n", gives two
X fields "a b" and "c"; changing
X .B FS
--- 1119,1130 ----
X .RS
X .PP
! For example, if a file is "a\ b\enc\en\en",
X .B RS
! = "\en\en+" and
X .B FS
! = "\ ", then there is one record "a\ b\enc" with three
X fields "a", "b" and "c". Changing
X .B FS
! = "\en", gives two
X fields "a b" and "c"; changing
X .B FS
***************
*** 1144,1148 ****
X set
X .B RS
! = "\\n([\ \\t]*\\n)+".
X For compatibility with other awks, setting
X .B RS
--- 1136,1140 ----
X set
X .B RS
! = "\en([\ \et]*\en)+".
X For compatibility with other awks, setting
X .B RS
***************
*** 1151,1156 ****
X front and back of files and then records are determined as if
X .B RS
! = "\\n\\n+".
! Posix requires that "\\n" always separates records when
X .B RS
X = "" regardless of the value of
--- 1143,1148 ----
X front and back of files and then records are determined as if
X .B RS
! = "\en\en+".
! Posix requires that "\en" always separates records when
X .B RS
X = "" regardless of the value of
***************
*** 1158,1162 ****
X .B mawk
X does not support this convention, because defining
! "\\n" as <SPACE> makes it unnecessary.
X .\"
X .PP
--- 1150,1154 ----
X .B mawk
X does not support this convention, because defining
! "\en" as <SPACE> makes it unnecessary.
X .\"
X .PP
***************
*** 1166,1170 ****
X will also want to change
X .B ORS
! to "\\n\\n" so the record spacing is preserved on output.
X .\"
X .SS "\fB13. Program execution"
--- 1158,1162 ----
X will also want to change
X .B ORS
! to "\en\en" so the record spacing is preserved on output.
X .\"
X .SS "\fB13. Program execution"
***************
*** 1198,1202 ****
X .B ARGV[4]
X = "B".
!
X Next, each
X .B BEGIN
--- 1190,1194 ----
X .B ARGV[4]
X = "B".
! .PP
X Next, each
X .B BEGIN
***************
*** 1326,1330 ****
X .B exit
X or subsequent error.
-
X .SH EXAMPLES
X .nf
--- 1318,1321 ----
***************
*** 1335,1339 ****
X 2. emulate wc.
X
! { chars += length($0) + 1 # add one for the \\n
X words += NF
X }
--- 1326,1330 ----
X 2. emulate wc.
X
! { chars += length($0) + 1 # add one for the \en
X words += NF
X }
***************
*** 1385,1389 ****
X
X .fi
-
X .SH "COMPATIBILITY ISSUES"
X The Posix 1003.2(draft 11.2) definition of the AWK language
--- 1376,1379 ----
***************
*** 1405,1409 ****
X a time.
X .B RS
! can be changed from "\\n" to another single character,
X but it
X is hard to find any use for this \(em there are no
--- 1395,1399 ----
X a time.
X .B RS
! can be changed from "\en" to another single character,
X but it
X is hard to find any use for this \(em there are no
***************
*** 1411,1415 ****
X By convention, \fBRS\fR = "", makes one or more blank lines
X separate records, allowing multi-line records. When
! \fBRS\fR = "", "\\n" is always a field separator
X regardless of the value in
X .BR FS .
--- 1401,1405 ----
X By convention, \fBRS\fR = "", makes one or more blank lines
X separate records, allowing multi-line records. When
! \fBRS\fR = "", "\en" is always a field separator
X regardless of the value in
X .BR FS .
***************
*** 1420,1424 ****
X .B RS
X to be a regular expression.
! When "\\n" appears in records, it is treated as space, and
X .B FS
X always determines fields.
--- 1410,1414 ----
X .B RS
X to be a regular expression.
! When "\en" appears in records, it is treated as space, and
X .B FS
X always determines fields.
***************
*** 1450,1454 ****
X .sp
X BEGIN {
! RS = "/\|\\*([^*]\||\|\\*+[^/*])*\\*+/"
X # comment is record separator
X ORS = " "
--- 1440,1444 ----
X .sp
X BEGIN {
! RS = "/\|\e*([^*]\||\|\e*+[^/*])*\e*+/"
X # comment is record separator
X ORS = " "
***************
*** 1469,1473 ****
X .nf
X .sp
! x ~ /a\\+b/ x ~ "a\\+b" x ~ "a\\\\+b"
X .sp
X .fi
--- 1459,1463 ----
X .nf
X .sp
! x ~ /a\e+b/ x ~ "a\e+b" x ~ "a\e\e+b"
X .sp
X .fi
***************
*** 1486,1493 ****
X the more portable but less readable, double escape.
X .PP
! Posix AWK does not recognize "/dev/stderr" or \\x hex escape
X sequences in strings. Unlike ANSI C,
X .B mawk
! limits the number of digits that follows \\x to two.
X .PP
X Finally, here is how
--- 1476,1483 ----
X the more portable but less readable, double escape.
X .PP
! Posix AWK does not recognize "/dev/stderr" or \ex hex escape
X sequences in strings. Unlike ANSI C,
X .B mawk
! limits the number of digits that follows \ex to two.
X .PP
X Finally, here is how
***************
*** 1504,1508 ****
X returned; so substr("ABC", 1, 0) = "" and
X substr("ABC", \-4, 6) = "A".
!
X Every string, including the empty string, matches the empty string
X at the
--- 1494,1498 ----
X returned; so substr("ABC", 1, 0) = "" and
X substr("ABC", \-4, 6) = "A".
! .PP
X Every string, including the empty string, matches the empty string
X at the
***************
*** 1511,1515 ****
X .B RLENGTH
X to 0.
!
X index(s, t) is always the same as match(s, t1) where t1 is the
X same as t with metacharacters escaped. Hence consistency
--- 1501,1505 ----
X .B RLENGTH
X to 0.
! .PP
X index(s, t) is always the same as match(s, t1) where t1 is the
X same as t with metacharacters escaped. Hence consistency
***************
*** 1518,1522 ****
X Also the condition, index(s,t) != 0 if and only t is a substring
X of s, requires index("","") = 1.
!
X If getline encounters end of file, getline var, leaves var
X unchanged. Similarly, on entry to the
--- 1508,1512 ----
X Also the condition, index(s,t) != 0 if and only t is a substring
X of s, requires index("","") = 1.
! .PP
X If getline encounters end of file, getline var, leaves var
X unchanged. Similarly, on entry to the
***************
*** 1527,1534 ****
X .B NF
X have their value unaltered from the last record.
-
X .SH SEE ALSO
! .I egrep
! (1)
X .PP
X Aho, Kernighan and Weinberger,
--- 1517,1522 ----
X .B NF
X have their value unaltered from the last record.
X .SH SEE ALSO
! .IR egrep (1)
X .PP
X Aho, Kernighan and Weinberger,
***************
*** 1547,1558 ****
X The section on AWK arrays is excellent. It also
X discusses Posix requirements for AWK.
-
-
X .SH BUGS
X .B mawk
! cannot handle ascii NUL \\0 in the source or data files. You
X can output NUL using printf with %c, and any other 8 bit
X character is acceptable input.
!
X .B mawk
X implements printf() and sprintf() using the C library functions,
--- 1535,1544 ----
X The section on AWK arrays is excellent. It also
X discusses Posix requirements for AWK.
X .SH BUGS
X .B mawk
! cannot handle ascii NUL \e0 in the source or data files. You
X can output NUL using printf with %c, and any other 8 bit
X character is acceptable input.
! .PP
X .B mawk
X implements printf() and sprintf() using the C library functions,
***************
*** 1562,1569 ****
X .B mawk
X inherits any bugs or limitations of the library functions.
!
X Implementors of the AWK language have shown a consistent lack
X of imagination when naming their programs.
-
X .SH AUTHOR
X Mike Brennan (brennan@boeing.com).
--- 1548,1554 ----
X .B mawk
X inherits any bugs or limitations of the library functions.
! .PP
X Implementors of the AWK language have shown a consistent lack
X of imagination when naming their programs.
X .SH AUTHOR
X Mike Brennan (brennan@boeing.com).
*** mawk/msdos/Makefile.tcc Tue Mar 3 17:24:52 1992
--- mawk112/msdos/Makefile.tcc Tue Apr 7 12:56:59 1992
***************
*** 8,13 ****
X # make -DLARGE -DREARGV -- bmawk.exe unix command line
X
! #$Log: Makefile.tcc,v $
! #Revision 1.2 91/11/12 09:59:26 brennan
X #changed tcc to $(CC) and .o to .obj
X #
--- 8,13 ----
X # make -DLARGE -DREARGV -- bmawk.exe unix command line
X
! #$Log: Makefile.tcc,v $
! #Revision 1.2 1991/11/12 09:59:26 brennan
X #changed tcc to $(CC) and .o to .obj
X #
*** mawk/msdos/NOTES Tue Mar 3 17:24:48 1992
--- mawk112/msdos/NOTES Fri Jul 10 09:28:23 1992
***************
*** 142,150 ****
X POSSIBLE PROBLEMS:
X
! 1) Using TurboC++ 1.0, the code segment is 153 bytes short of
! 64K. With another compiler or a different version of TurboC++,
! this might not fit in 64K. If this is a problem,
! then compile with -DNO_BINMODE which removes the BINMODE features
! from small model only and then it should fit.
X
X 2) MSC 5.1 requires /Os and /Gs for small model to fit in 64K.
--- 142,148 ----
X POSSIBLE PROBLEMS:
X
! 1) Hopefully you can compile for speed and still fit the code
! in 64K. If not set your compiler switches to compile for
! optimized (ie small) size.
X
X 2) MSC 5.1 requires /Os and /Gs for small model to fit in 64K.
*** mawk/msdos/dosexec.c Tue Mar 3 17:24:48 1992
--- mawk112/msdos/dosexec.c Tue Jul 28 09:47:03 1992
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: dosexec.c,v $
! * Revision 1.2 91/11/16 10:27:18 brennan
! * BINMODE
! *
X * Revision 1.1 91/10/29 09:45:56 brennan
X * Initial revision
--- 11,21 ----
X ********************************************/
X
! /*$Log: dosexec.c,v $
! * Revision 1.3 1992/07/10 16:21:57 brennan
! * store exit code of input pipes
! *
! * Revision 1.2 1991/11/16 10:27:18 brennan
! * BINMODE
! *
X * Revision 1.1 91/10/29 09:45:56 brennan
X * Initial revision
***************
*** 99,107 ****
X
X
! static int next_tmp ;
! static char *tmpdir ;
X
- /* put the name of a temp file in string buff */
X
X char *tmp_file_name( id )
X int id ;
--- 102,110 ----
X
X
! static int next_tmp ; /* index for naming temp files */
! static char *tmpdir ; /* directory to hold temp files */
X
X
+ /* put the name of a temp file in string buff */
X char *tmp_file_name( id )
X int id ;
***************
*** 133,137 ****
X
X sprintf(xbuff, "%s > %s" , command, tmpfile) ;
! DOSexec(xbuff) ;
X retval = (PTR) FINopen(tmpfile, 0) ;
X }
--- 136,140 ----
X
X sprintf(xbuff, "%s > %s" , command, tmpfile) ;
! tmp_idp[1] = DOSexec(xbuff) ;
X retval = (PTR) FINopen(tmpfile, 0) ;
X }
***************
*** 160,164 ****
X
X #endif /* MSDOS */
-
-
-
--- 163,164 ----
*** mawk/msdos/see2obj.c Tue Mar 3 17:24:52 1992
--- mawk112/msdos/see2obj.c Tue Apr 7 12:56:58 1992
***************
*** 11,18 ****
X */
X
! /*$Log: see2obj.c,v $
! * Revision 1.1 91/10/29 07:53:53 brennan
X * Initial revision
! *
X */
X
--- 11,18 ----
X */
X
! /*$Log: see2obj.c,v $
! * Revision 1.1 1991/10/29 07:53:53 brennan
X * Initial revision
! *
X */
X
*** mawk/rexp/rexp.c Tue Mar 3 17:23:58 1992
--- mawk112/rexp/rexp.c Tue Apr 7 12:56:42 1992
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: rexp.c,v $
! * Revision 3.4 91/08/13 09:09:59 brennan
X * VERSION .9994
! *
X * Revision 3.3 91/08/04 15:45:03 brennan
X * no longer attempt to recover mem on failed REcompile
--- 11,18 ----
X ********************************************/
X
! /*$Log: rexp.c,v $
! * Revision 3.4 1991/08/13 09:09:59 brennan
X * VERSION .9994
! *
X * Revision 3.3 91/08/04 15:45:03 brennan
X * no longer attempt to recover mem on failed REcompile
*** mawk/rexp/rexp.h Tue Mar 3 17:24:00 1992
--- mawk112/rexp/rexp.h Tue Apr 7 12:56:43 1992
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: rexp.h,v $
! * Revision 3.6 92/01/21 17:31:45 brennan
X * moved ison() macro out of rexp[23].c
! *
X * Revision 3.5 91/10/29 10:53:55 brennan
X * SIZE_T
--- 11,18 ----
X ********************************************/
X
! /*$Log: rexp.h,v $
! * Revision 3.6 1992/01/21 17:31:45 brennan
X * moved ison() macro out of rexp[23].c
! *
X * Revision 3.5 91/10/29 10:53:55 brennan
X * SIZE_T
*** mawk/rexp/rexp0.c Tue Mar 3 17:24:00 1992
--- mawk112/rexp/rexp0.c Tue Apr 21 13:20:31 1992
***************
*** 11,15 ****
X ********************************************/
X
! /*$Log: rexp0.c,v $
X * Revision 3.6 92/01/21 17:32:51 brennan
X * added some casts so that character classes work with signed chars
--- 11,23 ----
X ********************************************/
X
! /*$Log: rexp0.c,v $
! * Revision 3.8 1992/04/21 20:22:38 brennan
! * 1.1 patch2
! * [c1-c2] now works if c2 is an escaped character
! *
! * Revision 3.7 1992/03/24 09:33:12 brennan
! * 1.1 patch2
! * When backing up in do_str, check if last character was escaped
! *
X * Revision 3.6 92/01/21 17:32:51 brennan
X * added some casts so that character classes work with signed chars
***************
*** 186,189 ****
--- 194,202 ----
X }
X
+ /*
+ collect a run of characters into a string
+ machine
+ */
+
X static int do_str( c, pp, mp)
X int c ; /* the first character */
***************
*** 191,199 ****
X MACHINE *mp ; /* where to put the string machine */
X { register char *p , *s ;
! char *str ;
! unsigned len ;
X
X
! p = *pp ;
X s = str = RE_malloc( re_len ) ;
X *s++ = c ; len = 1 ;
--- 204,213 ----
X MACHINE *mp ; /* where to put the string machine */
X { register char *p , *s ;
! char *p_entry ;
! char *str ; /* collect it here */
! unsigned len ; /* length collected */
X
X
! p = p_entry = *pp ;
X s = str = RE_malloc( re_len ) ;
X *s++ = c ; len = 1 ;
***************
*** 219,224 ****
X /* if len > 1 and we failed on a ? + or * , need to back up */
X if ( len > 1 && (*p == '*' || *p == '+' || *p == '?' ) )
! { len-- ; p-- ; s-- ; }
X
X *s = 0 ;
X *pp = p ;
--- 233,251 ----
X /* if len > 1 and we failed on a ? + or * , need to back up */
X if ( len > 1 && (*p == '*' || *p == '+' || *p == '?' ) )
! { len-- ; p-- ; s-- ;
X
+ /* if the last character was escaped, back up one more */
+ {
+ int cnt = 0 ;
+ char *bp = p-1 ;
+
+ while ( bp >= p_entry && *bp == '\\' )
+ {
+ cnt++ ; bp-- ;
+ }
+ if ( cnt & 1 ) p-- ;
+ }
+ }
+
X *s = 0 ;
X *pp = p ;
***************
*** 232,236 ****
X *---------------------------*/
X
! #define on( b, x) ( (b)[((unsigned char)(x))>>3] |= ( 1 << ((x)&7) ))
X
X static void PROTO(block_on, (BV,int,int) ) ;
--- 259,263 ----
X *---------------------------*/
X
! #define on( b, x) ((b)[(x)>>3] |= ( 1 << ((x)&7) ))
X
X static void PROTO(block_on, (BV,int,int) ) ;
***************
*** 237,243 ****
X
X static void block_on( b, x, y)
! BV b ; int x, y ;
! { int lo = (x&0xff) >> 3 ;
! int hi = (y&0xff) >> 3 ;
X int i, j, bit ;
X
--- 264,272 ----
X
X static void block_on( b, x, y)
! BV b ;
! int x, y ;
! /* caller makes sure x<=y and x>0 y>0 */
! { int lo = x >> 3 ;
! int hi = y >> 3 ;
X int i, j, bit ;
X
***************
*** 267,271 ****
X int comp_flag ;
X
! p = (*start) + 1 ;
X if ( *p == ']' || *p == '^' && *(p+1) == ']' )
X RE_error_trap(-E3) ;
--- 296,300 ----
X int comp_flag ;
X
! p = t = (*start) + 1 ;
X if ( *p == ']' || *p == '^' && *(p+1) == ']' )
X RE_error_trap(-E3) ;
***************
*** 280,284 ****
X }
X /* q now pts at the back of the class */
! p = (*start) + 1 ;
X *start = q + 1 ;
X
--- 309,313 ----
X }
X /* q now pts at the back of the class */
! p = t ;
X *start = q + 1 ;
X
***************
*** 286,290 ****
X (void) memset( bvp, 0, SIZE_T(sizeof(BV)) ) ;
X
! comp_flag = *p == '^' ? (p++ , 1) : 0 ;
X prev = -1 ; /* indicates - cannot be part of a range */
X
--- 315,321 ----
X (void) memset( bvp, 0, SIZE_T(sizeof(BV)) ) ;
X
! if ( *p == '^' ) { comp_flag = 1 ; p++ ; }
! else comp_flag = 0 ;
!
X prev = -1 ; /* indicates - cannot be part of a range */
X
***************
*** 292,318 ****
X {
X switch( *p )
! { case '\\' :
! t = ++p ;
X prev = escape(&t) ;
X on(*bvp, prev) ;
X p = t ;
! continue ;
X
X case '-' :
- if ( prev == -1 || p+1 == q || prev > *(unsigned char*)(p+1) )
- { prev = '-' ; on(*bvp, '-') ; }
- else
- { p++ ;
- block_on(*bvp, prev, *p) ;
- prev = -1 ;
- }
- break ;
X
X default :
! prev = *(unsigned char*)p ;
! on(*bvp, *p) ;
X break ;
X }
- p++ ;
X }
X
--- 323,375 ----
X {
X switch( *p )
! {
! case '\\' :
!
! t = p+1 ;
X prev = escape(&t) ;
X on(*bvp, prev) ;
X p = t ;
! break ;
X
X case '-' :
X
+ if ( prev == -1 || p+1 == q )
+ {
+ prev = '-' ;
+ on(*bvp,'-') ;
+ p++ ;
+ }
+ else
+ {
+ int c ;
+ char *mark = ++p ;
+
+ if ( *p != '\\' ) c = *(unsigned char *) p++ ;
+ else
+ {
+ t = p+1 ;
+ c = escape(&t) ;
+ p = t ;
+ }
+
+ if ( prev <= c )
+ {
+ block_on(*bvp, prev, c) ;
+ prev = -1 ;
+ }
+ else /* back up */
+ {
+ p = mark ;
+ prev = '-' ;
+ on(*bvp,'-') ;
+ }
+ }
+ break ;
+
X default :
! prev = *(unsigned char*)p++ ;
! on(*bvp, prev) ;
X break ;
X }
X }
X
***************
*** 455,458 ****
X /* anything else \c -> c */
X *start_p = p ;
! return p[-1] ;
X }
--- 512,515 ----
X /* anything else \c -> c */
X *start_p = p ;
! return *(unsigned char*)(p-1) ;
X }
*** mawk/rexp/rexp1.c Tue Mar 3 17:29:26 1992
--- mawk112/rexp/rexp1.c Mon Apr 27 10:14:01 1992
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: rexp1.c,v $
! * Revision 3.4 92/02/20 16:08:12 brennan
X * change new_TWO() to work around sun acc bug
! *
X * Revision 3.3 91/10/29 10:54:01 brennan
X * SIZE_T
--- 11,18 ----
X ********************************************/
X
! /*$Log: rexp1.c,v $
! * Revision 3.4 1992/02/20 16:08:12 brennan
X * change new_TWO() to work around sun acc bug
! *
X * Revision 3.3 91/10/29 10:54:01 brennan
X * SIZE_T
*** mawk/rexp/rexp2.c Tue Mar 3 17:24:02 1992
--- mawk112/rexp/rexp2.c Tue Apr 7 12:56:46 1992
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: rexp2.c,v $
! * Revision 3.7 92/01/21 17:33:15 brennan
X * added some casts so that character classes work with signed chars
! *
X * Revision 3.6 91/10/29 10:54:03 brennan
X * SIZE_T
--- 11,18 ----
X ********************************************/
X
! /*$Log: rexp2.c,v $
! * Revision 3.7 1992/01/21 17:33:15 brennan
X * added some casts so that character classes work with signed chars
! *
X * Revision 3.6 91/10/29 10:54:03 brennan
X * SIZE_T
*** mawk/rexp/rexp3.c Tue Mar 3 17:24:04 1992
--- mawk112/rexp/rexp3.c Tue Apr 7 12:56:46 1992
***************
*** 11,18 ****
X ********************************************/
X
! /*$Log: rexp3.c,v $
! * Revision 3.5 92/01/21 17:33:20 brennan
X * added some casts so that character classes work with signed chars
! *
X * Revision 3.4 91/10/29 10:54:09 brennan
X * SIZE_T
--- 11,18 ----
X ********************************************/
X
! /*$Log: rexp3.c,v $
! * Revision 3.5 1992/01/21 17:33:20 brennan
X * added some casts so that character classes work with signed chars
! *
X * Revision 3.4 91/10/29 10:54:09 brennan
X * SIZE_T
*** mawk/rexp/rexpdb.c Tue Mar 3 17:24:04 1992
--- mawk112/rexp/rexpdb.c Tue Apr 7 12:56:47 1992
***************
*** 12,19 ****
X
X
! /*$Log: rexpdb.c,v $
! * Revision 3.2 91/08/13 09:10:09 brennan
X * VERSION .9994
! *
X * Revision 3.1 91/06/07 10:33:30 brennan
X * VERSION 0.995
--- 12,19 ----
X
X
! /*$Log: rexpdb.c,v $
! * Revision 3.2 1991/08/13 09:10:09 brennan
X * VERSION .9994
! *
X * Revision 3.1 91/06/07 10:33:30 brennan
X * VERSION 0.995
*** /dev/null Thu Oct 8 13:30:24 1992
--- mawk112/config/aix.h Mon Jul 6 13:23:10 1992
***************
*** 0 ****
--- 1,36 ----
+
+ /********************************************
+ aix.h
+ copyright 1992. Michael D. Brennan
+
+ This is a source file for mawk, an implementation of
+ the AWK programming language.
+
+ Mawk is distributed without warranty under the terms of
+ the GNU General Public License, version 2, 1991.
+ ********************************************/
+
+
+ /* $Log: aix.h,v $
+ * Revision 1.1 1992/07/06 20:26:36 brennan
+ * Initial revision
+ *
+ */
+
+ /* AIX 3.1 on RS6000 */
+
+
+ #ifndef CONFIG_H
+ #define CONFIG_H 1
+
+ #define HAVE_STDLIB_H 1
+ #define HAVE_PROTOS 1
+ #define HAVE_STDARG_H 1
+ #define DONT_PROTO_OPEN
+
+
+
+
+ #include "config/Idefault.h"
+
+ #endif
*** /dev/null Thu Oct 8 13:30:24 1992
--- mawk112/config/convex.h Wed Jul 8 09:04:08 1992
***************
*** 0 ****
--- 1,46 ----
+
+ /********************************************
+ convex.h
+ copyright 1992, Michael D. Brennan
+
+ This is a source file for mawk, an implementation of
+ the AWK programming language.
+
+ Mawk is distributed without warranty under the terms of
+ the GNU General Public License, version 2, 1991.
+ ********************************************/
+
+
+ /* tested on ConvexOS 9.1
+
+ There is a bug in convex strtod(3) in OS 8.1, 9.0 and 9.1.
+
+ It is supposed to be fixed in 10.0
+
+ The patch is PR-25399
+
+ */
+
+ /*$Log: convex.h,v $
+ * Revision 1.1 1992/07/08 16:07:31 brennan
+ * Initial revision
+ *
+ */
+
+ /* convex.h */
+
+ #ifndef CONFIG_H
+ #define CONFIG_H 1
+
+ #define FPE_TRAPS_ON 1
+ #define FPE_ZERODIVIDE 0x4
+ #define FPE_OVERFLOW 0x3
+ #define HAVE_MATHERR 0
+
+ #define sys_nerr __ap$sys_nerr
+ #define sys_errlist __ap$sys_errlist
+
+ #include "config/Idefault.h"
+ #endif /* CONFIG_H */
+
+
*** /dev/null Thu Oct 8 13:30:24 1992
--- mawk112/config/sysVr4i386.h Tue Jul 14 07:20:41 1992
***************
*** 0 ****
--- 1,52 ----
+
+ /********************************************
+ sysVr4i386.h
+ copyright 1992, Michael D. Brennan
+
+ This is a source file for mawk, an implementation of
+ the AWK programming language.
+
+ Mawk is distributed without warranty under the terms of
+ the GNU General Public License, version 2, 1991.
+ ********************************************/
+
+
+ /*
+
+ On Intel platforms and maybe others,
+ for some strange reason, division by zero traps but overflow
+ does not, so we have to turn on the overflow trap.
+ (This seems like a small bug to me.)
+ If the trap is on, it won't hurt to turn it on some more.
+
+ If you have ieee754 hardware *and* a math lib that
+ supports it use sysV_ieeefp.h instead.
+
+ */
+
+ /*$Log: sysVr4i386.h,v $
+ * Revision 1.3 1992/07/14 14:23:35 brennan
+ * fixed typo
+ *
+ * Revision 1.2 1992/07/07 15:40:02 brennan
+ * DONT_PROTO_OPEN
+ *
+ * Revision 1.1 1992/07/01 18:07:47 brennan
+ * Initial revision
+ *
+ */
+
+ #ifndef CONFIG_H
+ #define CONFIG_H 1
+
+ #define FPE_TRAPS_ON 1
+ #define NOINFO_SIGFPE 1
+
+ #define USE_IEEEFP_H
+ #define TURN_ON_FPE_TRAPS() (void)fpsetmask(fpgetmask()|FP_X_OFL)
+
+ #define DONT_PROTO_OPEN
+
+ #include "config/Idefault.h"
+
+ #endif /* CONFIG_H */
SHAR_EOF
echo 'File diffs2 is complete' &&
chmod 0644 diffs2 ||
echo 'restore of diffs2 failed'
Wc_c="`wc -c < 'diffs2'`"
test 107075 -eq "$Wc_c" ||
echo 'diffs2: original size 107075, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= Xparse.c ==============
if test -f 'Xparse.c' -a X"$1" != X"-c"; then
echo 'x - skipping Xparse.c (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting Xparse.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'Xparse.c' &&
#ifndef lint
static char yyid[] = "@(#)modification of yaccpar 1.8 (Berkeley) 01/20/90";
#endif
#define YYXBYACC 1 /* XBYACC -- modified Berkeley yacc */
/*
X Berkeley yacc modified so only tables and
X yydebug and yylval are global
X #define YYGLOBAL -- gives standard byacc
X #define YYPURE -- gives a reentrant parser
X
X Mike Brennan 11/05/91
*/
#line 31 "parse.y"
#include <stdio.h>
#include "mawk.h"
#include "code.h"
#include "symtype.h"
#include "memory.h"
#include "bi_funct.h"
#include "bi_vars.h"
#include "jmp.h"
#include "field.h"
#include "files.h"
X
#ifdef YYXBYACC
#define YYBYACC 1
#endif
X
#define YYMAXDEPTH 200
X
/* Bison's use of MSDOS and ours clashes */
#undef MSDOS
X
extern void PROTO( eat_nl, (void) ) ;
static void PROTO( resize_fblock, (FBLOCK *, INST *) ) ;
static void PROTO( code_array, (SYMTAB *) ) ;
static void PROTO( code_call_id, (CA_REC *, SYMTAB *) ) ;
static void PROTO( field_A2I, (void)) ;
static int PROTO( current_offset, (void) ) ;
static void PROTO( check_var, (SYMTAB *) ) ;
static void PROTO( check_array, (SYMTAB *) ) ;
static void PROTO( RE_as_arg, (void)) ;
X
static int scope ;
static FBLOCK *active_funct ;
X /* when scope is SCOPE_FUNCT */
X
#define code_address(x) if( is_local(x) )\
X { code1(L_PUSHA) ; code1((x)->offset) ; }\
X else code2(_PUSHA, (x)->stval.cp)
X
/* this nonsense caters to MSDOS large model */
#define CODE_FE_PUSHA() code_ptr->ptr = (PTR) 0 ; code1(FE_PUSHA)
X
#line 74 "parse.y"
typedef union{
CELL *cp ;
SYMTAB *stp ;
INST *start ; /* code starting address */
PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */
BI_REC *bip ; /* ptr to info about a builtin */
FBLOCK *fbp ; /* ptr to a function block */
ARG2_REC *arg2p ;
CA_REC *ca_p ;
int ival ;
PTR ptr ;
} YYSTYPE;
#line 69 "y.tab.c"
#define UNEXPECTED 257
#define BAD_DECIMAL 258
#define NL 259
#define SEMI_COLON 260
#define LBRACE 261
#define RBRACE 262
#define LBOX 263
#define RBOX 264
#define COMMA 265
#define IO_OUT 266
#define ASSIGN 267
#define ADD_ASG 268
#define SUB_ASG 269
#define MUL_ASG 270
#define DIV_ASG 271
#define MOD_ASG 272
#define POW_ASG 273
#define QMARK 274
#define COLON 275
#define OR 276
#define AND 277
#define IN 278
#define MATCH 279
#define EQ 280
#define NEQ 281
#define LT 282
#define LTE 283
#define GT 284
#define GTE 285
#define CAT 286
#define GETLINE 287
#define PLUS 288
#define MINUS 289
#define MUL 290
#define DIV 291
#define MOD 292
#define NOT 293
#define UMINUS 294
#define IO_IN 295
#define PIPE 296
#define POW 297
#define INC_or_DEC 298
#define DOLLAR 299
#define FIELD 300
#define LPAREN 301
#define RPAREN 302
#define DOUBLE 303
#define STRING_ 304
#define RE 305
#define ID 306
#define D_ID 307
#define FUNCT_ID 308
#define BUILTIN 309
#define LENGTH 310
#define PRINT 311
#define PRINTF 312
#define SPLIT 313
#define MATCH_FUNC 314
#define SUB 315
#define GSUB 316
#define DO 317
#define WHILE 318
#define FOR 319
#define BREAK 320
#define CONTINUE 321
#define IF 322
#define ELSE 323
#define DELETE 324
#define BEGIN 325
#define END 326
#define EXIT 327
#define NEXT 328
#define RETURN 329
#define FUNCTION 330
#define YYERRCODE 256
short yylhs[] = { -1,
X 0, 0, 36, 36, 36, 37, 40, 37, 41, 37,
X 42, 37, 43, 44, 37, 1, 1, 2, 2, 3,
X 3, 4, 4, 4, 4, 4, 4, 4, 4, 45,
X 45, 13, 13, 13, 13, 13, 13, 13, 13, 13,
X 13, 13, 13, 13, 13, 13, 46, 13, 47, 13,
X 48, 49, 13, 14, 14, 15, 15, 15, 15, 15,
X 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
X 15, 15, 15, 15, 10, 25, 25, 26, 26, 8,
X 8, 5, 4, 27, 27, 6, 6, 6, 7, 7,
X 50, 50, 17, 4, 51, 4, 52, 4, 16, 4,
X 4, 18, 18, 19, 19, 53, 53, 13, 13, 10,
X 15, 15, 4, 20, 4, 11, 11, 11, 11, 11,
X 15, 13, 13, 13, 13, 13, 13, 13, 15, 22,
X 54, 54, 15, 23, 4, 4, 21, 21, 15, 15,
X 15, 15, 15, 55, 12, 12, 9, 9, 15, 28,
X 28, 24, 24, 38, 29, 30, 30, 34, 34, 35,
X 35, 39, 15, 31, 31, 32, 32, 32, 33, 33,
};
short yylen[] = { 2,
X 1, 2, 1, 1, 2, 1, 0, 3, 0, 3,
X 0, 3, 0, 0, 6, 3, 3, 1, 1, 1,
X 2, 1, 2, 1, 2, 2, 2, 1, 2, 1,
X 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
X 3, 3, 3, 3, 3, 3, 0, 4, 0, 4,
X 0, 0, 7, 1, 2, 1, 1, 1, 3, 1,
X 3, 3, 3, 3, 3, 3, 2, 2, 2, 1,
X 2, 2, 2, 2, 1, 0, 1, 1, 3, 5,
X 1, 0, 5, 1, 1, 1, 3, 2, 3, 3,
X 0, 2, 4, 2, 1, 4, 1, 7, 4, 2,
X 4, 3, 4, 1, 2, 1, 2, 3, 5, 5,
X 5, 6, 7, 6, 2, 1, 2, 6, 2, 3,
X 1, 3, 3, 3, 3, 3, 3, 3, 2, 5,
X 1, 3, 6, 1, 2, 3, 2, 3, 1, 2,
X 2, 3, 4, 1, 1, 1, 2, 3, 6, 1,
X 1, 1, 3, 2, 4, 2, 2, 0, 1, 1,
X 3, 1, 3, 2, 2, 1, 3, 3, 2, 2,
};
short yydefred[] = { 0,
X 162, 0, 144, 0, 0, 0, 0, 0, 116, 0,
X 56, 57, 60, 0, 82, 82, 81, 0, 0, 150,
X 151, 7, 9, 0, 0, 6, 70, 0, 0, 0,
X 0, 0, 0, 0, 0, 0, 0, 1, 3, 4,
X 0, 0, 0, 30, 31, 84, 85, 97, 0, 0,
X 0, 0, 0, 0, 0, 0, 0, 22, 0, 20,
X 0, 0, 0, 0, 0, 28, 82, 24, 0, 0,
X 0, 0, 0, 0, 0, 0, 0, 72, 74, 0,
X 119, 0, 0, 0, 71, 0, 0, 0, 0, 0,
X 0, 0, 156, 157, 2, 0, 0, 0, 0, 0,
X 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
X 73, 13, 51, 47, 49, 0, 0, 0, 0, 0,
X 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
X 0, 0, 0, 131, 129, 0, 154, 0, 5, 147,
X 145, 146, 0, 17, 25, 0, 0, 26, 27, 0,
X 82, 0, 135, 29, 0, 137, 0, 16, 21, 23,
X 100, 0, 104, 0, 0, 115, 0, 0, 0, 0,
X 0, 0, 0, 0, 0, 120, 0, 59, 0, 0,
X 163, 0, 0, 0, 0, 8, 10, 0, 0, 0,
X 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
X 0, 0, 0, 0, 0, 108, 0, 40, 41, 42,
X 43, 44, 45, 18, 12, 19, 0, 0, 0, 0,
X 0, 0, 0, 0, 0, 0, 160, 0, 0, 148,
X 0, 102, 0, 0, 0, 0, 136, 138, 95, 0,
X 105, 106, 0, 0, 0, 0, 0, 86, 0, 0,
X 0, 0, 0, 0, 0, 0, 0, 164, 0, 0,
X 165, 0, 0, 0, 0, 0, 0, 0, 143, 132,
X 0, 155, 0, 99, 0, 103, 93, 0, 96, 107,
X 101, 88, 0, 0, 0, 0, 0, 0, 0, 0,
X 109, 0, 168, 170, 167, 169, 80, 130, 0, 0,
X 52, 0, 161, 0, 0, 0, 0, 83, 0, 0,
X 0, 110, 118, 112, 133, 15, 0, 0, 152, 149,
X 114, 0, 0, 0, 0, 113, 98, 153,
};
short yydgoto[] = { 25,
X 58, 215, 59, 60, 86, 246, 82, 27, 28, 29,
X 30, 143, 61, 32, 33, 62, 63, 64, 165, 65,
X 66, 34, 226, 320, 248, 249, 67, 35, 36, 37,
X 181, 182, 261, 228, 229, 38, 39, 40, 41, 91,
X 92, 124, 202, 300, 68, 204, 205, 203, 317, 285,
X 240, 69, 244, 135, 42,
};
short yysindex[] = { 35,
X 0, 278, 0, 2243, 2243, 2243, -26, 2153, 0, 2273,
X 0, 0, 0, -286, 0, 0, 0, -269, -228, 0,
X 0, 0, 0, -255, 35, 0, 0, 2243, 284, 2166,
X 2547, 2243, 116, -257, -161, -246, -159, 0, 0, 0,
X -246, -63, -124, 0, 0, 0, 0, 0, -157, -151,
X -196, -196, -148, -141, 1729, -196, 1729, 0, 130, 0,
X 2499, 352, 352, 69, 352, 0, 0, 0, 352, 2273,
X -286, -220, -211, -211, -211, -282, 0, 0, 0, 0,
X 0, -232, 2146, 2093, 0, -96, -132, -122, 2273, 2273,
X -246, -246, 0, 0, 0, -120, 2273, 2273, 2273, 2273,
X 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,
X 0, 0, 0, 0, 0, -110, 2273, 2273, 2273, 2273,
SHAR_EOF
true || echo 'restore of Xparse.c failed'
fi
echo 'End of part 2'
echo 'File Xparse.c is continued in part 3'
echo 3 > _shar_seq_.tmp
exit 0
exit 0 # Just in case...
--
Andrew Patrick acting as Comp.Sources.Reviewed Moderator
Department of Communications, Ottawa, CANADA
csr@calvin.dgbt.doc.CA
Technical Details
Message-ID:
<1992Oct13.221302.10055@rick.dgbt.doc.ca>Path:
arc1-ca.pugleaf.net!sparky!uunet!paladin.american.edu!darwin.sura.net!convex!news.utdallas.edu!corpgate!bnrgate!nrcnet0!dgbt!rick.dgbt.doc.ca!calvin.dgbt.doc.ca!csrShow Full Headers
Complete Article Headers
Newsgroups: comp.sources.reviewed Path: arc1-ca.pugleaf.net!sparky!uunet!paladin.american.edu!darwin.sura.net!convex!news.utdallas.edu!corpgate!bnrgate!nrcnet0!dgbt!rick.dgbt.doc.ca!calvin.dgbt.doc.ca!csr From: Mike Brennan <brennan@boeing.com> Subject: v02i029: mawk - (Ver. 1.1) An interpreter for the AWK language, Patch02b/4 Message-ID: <1992Oct13.221302.10055@rick.dgbt.doc.ca> Originator: csr@calvin.dgbt.doc.ca Sender: news@rick.dgbt.doc.ca Nntp-Posting-Host: calvin.dgbt.doc.ca Organization: Communications Research Centre, Ottawa Date: Tue, 13 Oct 1992 22:13:02 GMT Approved: csr@calvin.dgbt.doc.ca Lines: 2421