🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.sources.reviewed
Article #24

v02i028: mawk - (Ver. 1.1) An interpreter for the AWK language, Patch02a/4

#24
From: Mike Brennan
Date: Tue, 13 Oct 1992 22:12
2548 lines
64711 bytes
Submitted-by: Mike Brennan <brennan@boeing.com>
Posting-number: Volume 2, Issue 28
Archive-name: mawk/patch02a
Patch-To: mawk: Volume 1, Issue 50-68

This is patch2 for mawk1.1 which updates mawk1.1.1 to mawk1.1.2

The changes fix all bugs reported since 1.1.1, and add
new configurations for aix, convex and sysVr4i386.
See the file PATCHES for more details.


Unpack the parts in order.
To install the patch read the comments in the executable
/bin/sh script, apply2.sh and then execute it.


#!/bin/sh
# This is a shell archive (produced by shar 3.50)
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
#
# made 10/09/1992 16:59 UTC by brennan@mlssun12
# Source directory /usr/brennan/mawk/X
#
# existing files will NOT be overwritten unless -c is specified
#
# This is part 1 of a multipart archive                                    
# do not concatenate these parts, unpack them in order with /bin/sh        
#
# This shar contains:
# length  mode       name
# ------ ---------- ------------------------------------------
#    822 -rwxr-xr-x apply2.sh
# 107075 -rw-r--r-- diffs2
#  91455 -rw-r--r-- Xparse.c
#   1671 -rw-r--r-- Xparse.h
#  22396 -rw-r--r-- doc.diff
#
if test -r _shar_seq_.tmp; then
	echo 'Must unpack archives in sequence!'
	echo Please unpack part `cat _shar_seq_.tmp` next
	exit 1
fi
# ============= apply2.sh ==============
if test -f 'apply2.sh' -a X"$1" != X"-c"; then
	echo 'x - skipping apply2.sh (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting apply2.sh (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'apply2.sh' &&
#!/bin/sh
X
#   apply2.sh
X
X
# move the following files to your mawk directory
# and  execute this script
#
#
#   apply2.sh    -- this script
#   diffs2
#   Xparse.h
#   Xparse.c
#   doc.diff
#
X
X
######## the old parse.[ch] get removed ##########
#  if you want to save them, move them someplace else
#  (there's no good reason to save them)
X
rm -f parse.c
rm -f parse.h
X
########################################
X
X
mv  Xparse.h  parse.h
mv  Xparse.c  parse.c
X
X
echo ignore warnings from mkdir
patch -s -p1 < diffs2
X
X
############
#
# some users with troff may not have bothered with mawk.doc
# so don't patch it if we cannot find it
#
X
(
X  cd man
X
X  if test -f mawk.doc
X    then
X      patch -s < ../doc.diff
X
X    else
X      echo 'cannot find "mawk.doc"'
X      echo You do not need it if you can format mawk.1
X
X  fi
X      
)
SHAR_EOF
chmod 0755 apply2.sh ||
echo 'restore of apply2.sh failed'
Wc_c="`wc -c < 'apply2.sh'`"
test 822 -eq "$Wc_c" ||
	echo 'apply2.sh: original size 822, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= diffs2 ==============
if test -f 'diffs2' -a X"$1" != X"-c"; then
	echo 'x - skipping diffs2 (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting diffs2 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'diffs2' &&
*** mawk/ACKNOWLEDGMENT	Tue Mar  3 17:28:56 1992
--- mawk112/ACKNOWLEDGMENT	Wed Aug 26 20:47:27 1992
***************
*** 18,21 ****
--- 18,22 ----
X  	Mike Carlton		Next 2.1
X  	Elliot Jaffe		AIX 3.1
+ 	Jeremy Martin		Convex 9.1
X  
X  The DOS version is a lot better thanks to suggestions and testing
***************
*** 26,28 ****
X  explained some of the "dark corners".
X  
! 
--- 27,30 ----
X  explained some of the "dark corners".
X  
! Thank you to everyone who reported bugs or offered encouragement,
! suggestions or criticism. (At least the bugs got fixed).
*** mawk/Makefile.in	Tue Mar  3 17:29:04 1992
--- mawk112/Makefile.in	Thu Jun 11 13:33:58 1992
***************
*** 44,48 ****
X  #AWK= mawk  # or gawk or nawk or awk
X  #FIX_YTAB=$(AWK) -f modbison.awk 
! #		       uncomment this with bison 1.14
X  #                      don't use an earlier version
X  
--- 44,48 ----
X  #AWK= mawk  # or gawk or nawk or awk
X  #FIX_YTAB=$(AWK) -f modbison.awk 
! #		       uncomment this with bison 1.14 or 1.18
X  #                      don't use an earlier version
X  
*** mawk/NEW	Tue Mar  3 17:22:54 1992
--- mawk112/NEW	Wed Jul  8 09:04:54 1992
***************
*** 57,78 ****
X  
X  
- length   is no longer valid must be length() or length(expr)
- 
-       (programs that fail can be run through
- 	examples/ct_length.awk,
-        ct stands for cold turkey)
- 
- [WARNING: THIS BREAKS SOME OLD AWK SCRIPTS.
- Mawk1.1 does not support length without arguments, because
- 
- 	(1) It's not in the posix draft.
- 	(2) It's not in the AWK book.
- 	(3) It's inconsistent with the overall language design.
- 
- Those who disagree with this decision enough to complain should
- put "pointy-headed purist" somewhere in their Subject: line.
- ]
- 
- 
X  printf and sprintf are ANSI C compatible, you can for example
X  
--- 57,60 ----
*** mawk/PATCHES	Tue Mar  3 17:28:54 1992
--- mawk112/PATCHES	Wed Aug 26 21:03:08 1992
***************
*** 1,5 ****
X  
X  
! patch1:  mawk1.1 to mawk1.1.1
X  
X  1) fixed bug which caused 
--- 1,65 ----
X  
+ patch2:  mawk1.1.1 -> mawk1.1.2   26 Aug 92
X  
! 1)  Comparisons are done as described the AWK book, which is the
!     same as mawk1.0.  Evidently I lack the requisite mental facilities
!     to understand posix comparisons , i.e.
! 
!       echo 0 | mawk '$0 == "0000" { print "true" }'
!       true
! 
!     was a major bozo.
! 
! 2)  If n = split(s, X, r) , then all elements other than
!     X[1..n] are now deleted from X.  This behavior is 
!     consistent with other awks.
! 
! 3)  foo = "foo"
!     foo++ evaluates to 0 and value of foo is 1
! 
!     old behavior was foo++ was "foo" and foo then set to 1
! 
! 4)  Fixed two bugs in regular expression lexical scanner:
! 
!     [c1-c2] did not work right if c2 was an escaped character.
! 
!     function do_str() which collected runs of characters did
!     not work right if the last character was escaped and the run
!     ended with * + or ?.
! 
! 5)  You can now read and write to the same file.  E.g.
! 
!     printf "Enter:  " > "/dev/tty"
!     getline answer < "/dev/tty"
! 
! 6)  Output to files which are ttys is now unbuffered.
! 
! 7)  FILENAME and FNR retain their value from the last record in
!     the END section.  
! 
! 8)  man pages might groff.
! 
! 9)  New configuration files
! 	aix.h  convex.h  sysVr4i386.h
! 
! 10) Better error recovery for bungled function definitions
!     via new productions
! 
!     program_block : outside_error block ;
!     error : outside_error ;
! 
! 11) If i > NF , then ++$i , $i++, g?sub(r,s,$i), now work
!     correctly.
! 
! 12) MsDOS, interactive input: terminating a line with ^Z
!     works correctly (at least with TC++ compiler).
! 
! l3) string_buff had too many users which induced an error in
!     sprintf().  After parsing, string_buff is now only be used
!     by sprintf().
!     (Old fart seduced by subliminal common block).
! 
! --------------------------------------------------
! patch1:  mawk1.1 to mawk1.1.1     (mar 92)
X  
X  1) fixed bug which caused 
*** mawk/UCONFIG	Tue Mar  3 17:28:58 1992
--- mawk112/UCONFIG	Wed Aug 26 20:35:14 1992
***************
*** 24,27 ****
--- 24,28 ----
X  sysVsco				gcc
X  sysV_ieeefp
+ sysVr4i386			gcc rcc
X  xenix_r2
X  stardentVr3
***************
*** 33,36 ****
--- 34,38 ----
X  sgi
X  aix
+ convex
X  
X  atarist				cross compile with gcc
***************
*** 90,93 ****
--- 92,97 ----
X  	 math libraries support the IEEE754 standard )
X  
+ sysVr4i386
+ 	Tested on ESIX and Consensys.
X  
X  stardentVr3
*** mawk/array.c	Tue Mar  3 17:23:04 1992
--- mawk112/array.c	Fri Aug 14 13:07:29 1992
***************
*** 2,6 ****
X  /********************************************
X  array.c
! copyright 1991, Michael D. Brennan
X  
X  This is a source file for mawk, an implementation of
--- 2,6 ----
X  /********************************************
X  array.c
! copyright 1991, 1992.  Michael D. Brennan
X  
X  This is a source file for mawk, an implementation of
***************
*** 11,15 ****
X  ********************************************/
X  
! /* $Log:	array.c,v $
X   * Revision 5.1  91/12/05  07:55:32  brennan
X   * 1.1 pre-release
--- 11,21 ----
X  ********************************************/
X  
! /* $Log: array.c,v $
!  * Revision 5.2  1992/04/07  17:17:31  brennan
!  * patch 2
!  * n = split(s,A,r)
!  * delete A[i] if i not in 1..n
!  * This is consistent with [ng]?awk
!  *
X   * Revision 5.1  91/12/05  07:55:32  brennan
X   * 1.1 pre-release
***************
*** 31,34 ****
--- 37,41 ----
X  static ANODE *PROTO(find_by_dval, (ARRAY, double, int)) ;
X  static void PROTO(load_array_ov, (ARRAY) ) ;
+ static void PROTO(ilist_delete, (ARRAY, ANODE*)) ;
X  
X  
***************
*** 60,74 ****
X     ANODE *q = 0 ; /* holds first deleted ANODE */
X  
!    while ( p )
!    {
X       if ( p->sval )
!      { if ( strcmp(s,p->sval->str) == 0 )  return p ; }
!      else /* its deleted, mark with q */
!      if ( ! q )  q = p ;  
X  
!      p = p->link ;
!    }
! 
!    /* not there */
X     if ( cflag )
X     {
--- 67,83 ----
X     ANODE *q = 0 ; /* holds first deleted ANODE */
X  
!    while ( 1 )
!      if ( !p )  goto not_there ;
!      else 
X       if ( p->sval )
! 	if ( strcmp(s,p->sval->str) == 0 )  return p ;
! 	else  p = p->link ;
!      else { q = p ; p = p->link ; break ; }
! 	
!    while ( p )  /* q is now set */
!      if ( p->sval && strcmp(s,p->sval->str) == 0 )  return p ; 
!      else  p = p->link ;
X  
! not_there :
X     if ( cflag )
X     {
***************
*** 203,213 ****
X      default :
X          ap = find_by_sval(A, string(cp), NO_CREATE) ;
!         if ( ap && ap->ival >= 0 )
!         {
!           int index = ap->ival % A_HASH_PRIME ;
! 
!           ap = find_by_index(A, index, ap->ival, NO_CREATE) ;
!           A[index].ilink = ap->ilink ;
!         }
X          break ;
X    }
--- 212,216 ----
X      default :
X          ap = find_by_sval(A, string(cp), NO_CREATE) ;
!         if ( ap && ap->ival >= 0 ) ilist_delete(A, ap) ;
X          break ;
X    }
***************
*** 252,256 ****
--- 255,276 ----
X  }
X  
+ /* delete an ANODE from the ilist that is known
+    to be there */
X  
+ static  void  ilist_delete(A, d) 
+   ARRAY A ;
+   ANODE *d ;
+ {
+   int index = d->ival % A_HASH_PRIME ;
+   register ANODE *p = A[index].ilink ;
+   register ANODE *q = (ANODE *) 0 ;
+ 
+   while ( p != d ) { q = p ; p = p->ilink ; }
+ 
+   if ( q )  q->ilink = p->ilink ;
+   else  A[index].ilink = p->ilink ;
+ }
+ 
+ 
X  /* this is called by bi_split()
X     to load strings into an array
***************
*** 264,267 ****
--- 284,309 ----
X    register int index ;
X  
+   { /* clear A , leaving only A[1]..A[cnt] (if exist) */
+     int i ;
+     ANODE *p ;
+ 
+     for( i = 0 ; i < A_HASH_PRIME ; i++ )
+     {
+       p = A[i].link ;
+       while ( p )
+       {
+ 	if ( p->sval && (p->ival <= 0 || p->ival > cnt) )
+ 	{
+ 	  if (p->ival >= 0) ilist_delete(A, p) ;
+ 
+ 	  free_STRING(p->sval) ;
+ 	  p->sval = (STRING *) 0 ;
+ 	  cell_destroy(p->cp) ;
+ 	  ZFREE(p->cp) ;
+ 	}
+ 	p = p->link ;
+       }
+     }
+   }
X    if ( cnt > MAX_SPLIT )
X    {
*** mawk/bi_funct.c	Tue Mar  3 17:23:06 1992
--- mawk112/bi_funct.c	Wed Jul  8 08:40:18 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	bi_funct.c,v $
!  * Revision 5.1  91/12/05  07:55:35  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,21 ----
X  ********************************************/
X  
! /* $Log: bi_funct.c,v $
!  * Revision 5.2  1992/07/08  15:43:41  brennan
!  * patch2: length returns.  I am a wimp
!  *
!  * Revision 5.1  1991/12/05  07:55:35  brennan
X   * 1.1 pre-release
!  *
X  */
X  
***************
*** 39,45 ****
X  BI_REC  bi_funct[] = { /* info to load builtins */
X  
X  "index" , bi_index , 2, 2 ,
X  "substr" , bi_substr, 2, 3,
- "length" , bi_length, 0, 1,
X  "sprintf" , bi_sprintf, 1, 255,
X  "sin", bi_sin , 1, 1 ,
--- 42,48 ----
X  BI_REC  bi_funct[] = { /* info to load builtins */
X  
+ "length" , bi_length, 0, 1, /* special must come first */
X  "index" , bi_index , 2, 2 ,
X  "substr" , bi_substr, 2, 3,
X  "sprintf" , bi_sprintf, 1, 255,
X  "sin", bi_sin , 1, 1 ,
***************
*** 60,73 ****
X  
X  
! 
X  void bi_funct_init()
! { register BI_REC *p = bi_funct ;
X    register SYMTAB *stp ;
X  
!   while ( p->name )
X    { stp = insert( p->name ) ;
X      stp->type = ST_BUILTIN ;
!     stp->stval.bip = p++ ;
X    }
X    /* seed rand() off the clock */
X    { CELL c ;
--- 63,82 ----
X  
X  
! /* load built-in functions in symbol table */
X  void bi_funct_init()
! { register BI_REC *p ; 
X    register SYMTAB *stp ;
X  
!   /* length is special (posix bozo) */
!   stp = insert(bi_funct->name) ;
!   stp->type = ST_LENGTH ;
!   stp->stval.bip = bi_funct ;
! 
!   for( p = bi_funct + 1 ; p->name ; p++ )
X    { stp = insert( p->name ) ;
X      stp->type = ST_BUILTIN ;
!     stp->stval.bip = p ;
X    }
+ 
X    /* seed rand() off the clock */
X    { CELL c ;
*** mawk/bi_funct.h	Tue Mar  3 17:23:06 1992
--- mawk112/bi_funct.h	Tue Apr  7 12:56:06 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	bi_funct.h,v $
!  * Revision 5.1  91/12/05  07:59:03  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /* $Log: bi_funct.h,v $
!  * Revision 5.1  1991/12/05  07:59:03  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/bi_vars.c	Tue Mar  3 17:23:08 1992
--- mawk112/bi_vars.c	Fri Jul 10 09:17:33 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	bi_vars.c,v $
!  * Revision 5.1  91/12/05  07:55:38  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,21 ----
X  ********************************************/
X  
! /* $Log: bi_vars.c,v $
!  * Revision 5.2  1992/07/10  16:17:10  brennan
!  * MsDOS: remove NO_BINMODE macro
!  *
!  * Revision 5.1  1991/12/05  07:55:38  brennan
X   * 1.1 pre-release
!  *
X  */
X  
***************
*** 42,46 ****
X  "RSTART" ,
X  "SUBSEP"
! #if MSDOS  && NO_BINMODE==0
X  , "BINMODE"
X  #endif
--- 45,49 ----
X  "RSTART" ,
X  "SUBSEP"
! #if MSDOS 
X  , "BINMODE"
X  #endif
***************
*** 81,85 ****
X    /* dval is already 0.0 */
X  
! #if  MSDOS  && NO_BINMODE==0
X    BINMODE->type = C_DOUBLE ;
X  #endif
--- 84,88 ----
X    /* dval is already 0.0 */
X  
! #if  MSDOS  
X    BINMODE->type = C_DOUBLE ;
X  #endif
*** mawk/bi_vars.h	Tue Mar  3 17:23:08 1992
--- mawk112/bi_vars.h	Fri Jul 10 09:17:35 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	bi_vars.h,v $
!  * Revision 5.1  91/12/05  07:59:05  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,22 ----
X  
X  
! /* $Log: bi_vars.h,v $
!  * Revision 5.2  1992/07/10  16:17:10  brennan
!  * MsDOS: remove NO_BINMODE macro
!  *
!  * Revision 5.1  1991/12/05  07:59:05  brennan
X   * 1.1 pre-release
!  *
X  */
X  
***************
*** 41,45 ****
X  #define  SUBSEP    (bi_vars+8)
X  
! #if  MSDOS  &&  NO_BINMODE==0
X  #define  BINMODE   (bi_vars+9)
X  #define  NUM_BI_VAR  10
--- 44,48 ----
X  #define  SUBSEP    (bi_vars+8)
X  
! #if  MSDOS 
X  #define  BINMODE   (bi_vars+9)
X  #define  NUM_BI_VAR  10
*** mawk/build_mawk	Tue Mar  3 17:29:00 1992
--- mawk112/build_mawk	Wed Jul  8 09:37:46 1992
***************
*** 86,89 ****
--- 86,92 ----
X  	config=sysV_ieeefp.h ;;
X  
+ sysVr4i386)
+ 	config=sysVr4i386.h  ;;
+ 
X  # SCO UNIX has ranlib, but doesn't use it for native UNIX libraries
X  sysVsco)
***************
*** 116,122 ****
X  
X  aix)
! 	config=generic.h ;;
X  
X  
X  MF)  ;;
X  
--- 119,129 ----
X  
X  aix)
! 	config=aix.h ;;
X  
+ convex)
+ 	config=convex.h
+ 	cflags='-O2 -std' ;;
X  
+ 
X  MF)  ;;
X  
***************
*** 135,139 ****
X     if gcc -v  2>&1 | egrep 'version 2' >/dev/null
X        then  cflags=-O2
!       else  cflags=-O
X     fi
X  fi
--- 142,146 ----
X     if gcc -v  2>&1 | egrep 'version 2' >/dev/null
X        then  cflags=-O2
!       else  cflags='-O -traditional'
X     fi
X  fi
***************
*** 152,164 ****
X  ) > Makefile
X  
- [ $config = MF ]  &&  exit 0
X  
X  rm -f  config.h
X  echo linking config/$config to config.h
X  ln   config/$config  config.h
X  
- # make sure parse.c is not made if it exists
- # it should exist
- [ -f parse.c ] &&  { echo touching parse.c  ; touch parse.c ; }
X  
X  echo 'ready to run: make -f Makefile'
--- 159,177 ----
X  ) > Makefile
X  
X  
+ # make sure distribution parse.c is newer than parse.y
+ if [ -f parse.c ]  # should be true
+    then
+    echo touching parse.c  ; touch parse.c
+ fi
X  rm -f  config.h
+ 
+ 
+ [ $arg1 = MF ]  &&   exit 0
+ 
+ 
X  echo linking config/$config to config.h
X  ln   config/$config  config.h
X  
X  
X  echo 'ready to run: make -f Makefile'
*** mawk/cast.c	Tue Mar  3 17:23:10 1992
--- mawk112/cast.c	Mon Aug 17 07:15:58 1992
***************
*** 12,19 ****
X  
X  
! /*   $Log:	cast.c,v $
!  * Revision 5.1  91/12/05  07:55:41  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,22 ----
X  
X  
! /*   $Log: cast.c,v $
!  * Revision 5.2  1992/08/17  14:19:45  brennan
!  * patch2: After parsing, only bi_sprintf() uses string_buff.
!  *
!  * Revision 5.1  1991/12/05  07:55:41  brennan
X   * 1.1 pre-release
!  *
X  */
X  
***************
*** 129,133 ****
X  void cast1_to_s( cp )
X    register CELL *cp ;
! { register int ival ;
X  
X    switch( cp->type )
--- 132,138 ----
X  void cast1_to_s( cp )
X    register CELL *cp ;
! { 
!   register int ival ;
!   char xbuff[260] ;
X  
X    switch( cp->type )
***************
*** 140,149 ****
X  	
X  	if ( (double) (ival = (int) cp->dval) == cp->dval )
! 	    (void) sprintf(string_buff, "%d", ival) ;
X  	else
!             (void) sprintf(string_buff ,
!             string(CONVFMT)->str, cp->dval) ;
X  
!         cp->ptr = (PTR) new_STRING(string_buff) ;
X          break ;
X  
--- 145,153 ----
X  	
X  	if ( (double) (ival = (int) cp->dval) == cp->dval )
! 	    (void) sprintf(xbuff, "%d", ival) ;
X  	else
!             (void) sprintf(xbuff , string(CONVFMT)->str, cp->dval) ;
X  
!         cp->ptr = (PTR) new_STRING(xbuff) ;
X          break ;
X  
***************
*** 160,164 ****
X  void cast2_to_s( cp )
X    register CELL *cp ;
! { register int ival ;
X  
X    switch( cp->type )
--- 164,170 ----
X  void cast2_to_s( cp )
X    register CELL *cp ;
! { 
!   register int ival ;
!   char xbuff[260] ;
X  
X    switch( cp->type )
***************
*** 170,179 ****
X      case C_DOUBLE  :
X  	if ( (double) (ival = (int) cp->dval) == cp->dval )
! 	    (void) sprintf(string_buff, "%d", ival) ;
X  	else
!             (void) sprintf(string_buff ,
!             string(CONVFMT)->str, cp->dval) ;
X  
!         cp->ptr = (PTR) new_STRING(string_buff) ;
X          break ;
X  
--- 176,184 ----
X      case C_DOUBLE  :
X  	if ( (double) (ival = (int) cp->dval) == cp->dval )
! 	    (void) sprintf(xbuff, "%d", ival) ;
X  	else
!             (void) sprintf(xbuff , string(CONVFMT)->str, cp->dval) ;
X  
!         cp->ptr = (PTR) new_STRING(xbuff) ;
X          break ;
X  
***************
*** 198,207 ****
X      case C_DOUBLE  :
X  	if ( (double) (ival = (int) cp->dval) == cp->dval )
! 	    (void) sprintf(string_buff, "%d", ival) ;
X  	else
!             (void) sprintf(string_buff ,
!             string(CONVFMT)->str, cp->dval) ;
X  
!         cp->ptr = (PTR) new_STRING(string_buff) ;
X          break ;
X  
--- 203,211 ----
X      case C_DOUBLE  :
X  	if ( (double) (ival = (int) cp->dval) == cp->dval )
! 	    (void) sprintf(xbuff, "%d", ival) ;
X  	else
!             (void) sprintf(xbuff , string(CONVFMT)->str, cp->dval) ;
X  
!         cp->ptr = (PTR) new_STRING(xbuff) ;
X          break ;
X  
*** mawk/code.c	Tue Mar  3 17:23:10 1992
--- mawk112/code.c	Tue Apr  7 12:56:09 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	code.c,v $
!  * Revision 5.1  91/12/05  07:55:43  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /* $Log: code.c,v $
!  * Revision 5.1  1991/12/05  07:55:43  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/code.h	Tue Mar  3 17:23:12 1992
--- mawk112/code.h	Tue Apr  7 12:56:10 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	code.h,v $
!  * Revision 5.1  91/12/05  07:59:07  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /* $Log: code.h,v $
!  * Revision 5.1  1991/12/05  07:59:07  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/da.c	Tue Mar  3 17:23:12 1992
--- mawk112/da.c	Sat Jul 25 14:32:18 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	da.c,v $
!  * Revision 5.1  91/12/05  07:55:45  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,23 ----
X  
X  
! /* $Log: da.c,v $
!  * Revision 5.2  1992/07/25  21:35:25  brennan
!  * patch2
!  * fixed small typo on da of _PRE_DEC
!  *
!  * Revision 5.1  1991/12/05  07:55:45  brennan
X   * 1.1 pre-release
!  *
X  */
X  
***************
*** 77,85 ****
X  _POST_DEC, "post_dec",
X  _PRE_INC, "pre_inc",
! _PRE_INC, "pre_dec",
X  F_POST_INC, "f_post_inc",
X  F_POST_DEC, "f_post_dec",
X  F_PRE_INC, "f_pre_inc",
! F_PRE_INC, "f_pre_dec",
X  _EQ, "eq",
X  _NEQ, "neq",
--- 81,89 ----
X  _POST_DEC, "post_dec",
X  _PRE_INC, "pre_inc",
! _PRE_DEC, "pre_dec",
X  F_POST_INC, "f_post_inc",
X  F_POST_DEC, "f_post_dec",
X  F_PRE_INC, "f_pre_inc",
! F_PRE_DEC, "f_pre_dec",
X  _EQ, "eq",
X  _NEQ, "neq",
*** mawk/error.c	Tue Mar  3 17:23:14 1992
--- mawk112/error.c	Tue Apr  7 12:56:12 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	error.c,v $
!  * Revision 5.1  91/12/05  07:55:48  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /* $Log: error.c,v $
!  * Revision 5.1  1991/12/05  07:55:48  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/execute.c	Tue Mar  3 17:23:16 1992
--- mawk112/execute.c	Tue Aug 11 08:23:00 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	execute.c,v $
!  * Revision 5.1  91/12/05  07:55:50  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,36 ----
X  ********************************************/
X  
! /* $Log: execute.c,v $
!  * Revision 5.5  1992/08/11  15:24:55  brennan
!  * patch2: F_PUSHA and FE_PUSHA
!  * If this is preparation for g?sub(r,s,$expr) or (++|--) on $expr,
!  * then if expr > NF, make sure $expr is set to ""
!  *
!  * Revision 5.4  1992/08/11  14:51:54  brennan
!  * patch2:  $expr++ is numeric even if $expr is string.
!  * I forgot to do this earlier when handling x++ case.
!  *
!  * Revision 5.3  1992/07/08  17:03:30  brennan
!  * patch 2
!  * revert to version 1.0 comparisons, i.e.
!  * page 44-45 of AWK book
!  *
!  * Revision 5.2  1992/04/20  21:40:40  brennan
!  * patch 2
!  * x++ is numeric, even if x is string
!  *
!  * Revision 5.1  1991/12/05  07:55:50  brennan
X   * 1.1 pre-release
!  *
X  */
X  
***************
*** 138,142 ****
X  
X          case  F_PUSHA :
!             if ( (CELL*)cdp->ptr != field && nf < 0 ) split_field0() ;
X              /* fall thru */
X  
--- 156,185 ----
X  
X          case  F_PUSHA :
! 	    cp = (CELL*)cdp->ptr ;
! 	    if ( cp != field )
! 	    {
! 		if ( nf < 0 )  split_field0() ;
! 
! 		if ( ! ( 
! #if	LM_DOS
! 		     SAMESEG(cp,field)   &&
! #endif
! 		      cp >= NF && cp <= LAST_PFIELD ) )
! 		{
! 		  /* its a real field $1, $2 ... 
! 		     If its greater than $NF, we have to
! 		     make sure its set to ""  so that
! 		     (++|--) and g?sub() work right
! 		  */
! 		  t = field_addr_to_index(cp) ;
! 		  if ( t > nf )
! 		  {
! 		    cell_destroy(cp) ;
! 		    cp->type = C_STRING ;
! 		    cp->ptr = (PTR) &null_str ;
! 		    null_str.ref_cnt++ ;
! 		  }
! 		}
! 	    }
X              /* fall thru */
X  
***************
*** 197,200 ****
--- 240,252 ----
X              if ( t && nf < 0 )  split_field0() ;
X              sp->ptr = (PTR) field_ptr(t) ;
+ 	    if ( t > nf )
+ 	    {
+ 	      /* make sure its set to "" */
+ 	      cp = sp->ptr ;
+ 	      cell_destroy(cp) ;
+ 	      cp->type = C_STRING ;
+ 	      cp->ptr = (PTR) &null_str ;
+ 	      null_str.ref_cnt++ ;
+ 	    }
X              break ;
X  
***************
*** 671,676 ****
X  
X          case _POST_INC :
!             (void) cellcpy(sp, cp = (CELL *)sp->ptr) ;
X              if ( cp->type != C_DOUBLE ) cast1_to_d(cp) ;
X              cp->dval += 1.0 ;
X              break ;
--- 723,730 ----
X  
X          case _POST_INC :
! 	    cp = (CELL *)sp->ptr ;
X              if ( cp->type != C_DOUBLE ) cast1_to_d(cp) ;
+ 	    sp->type = C_DOUBLE ;
+ 	    sp->dval = cp->dval ;
X              cp->dval += 1.0 ;
X              break ;
***************
*** 677,682 ****
X  
X          case _POST_DEC :
!             (void) cellcpy(sp, cp = (CELL *)sp->ptr) ;
X              if ( cp->type != C_DOUBLE ) cast1_to_d(cp) ;
X              cp->dval -= 1.0 ;
X              break ;
--- 731,738 ----
X  
X          case _POST_DEC :
! 	    cp = (CELL *)sp->ptr ;
X              if ( cp->type != C_DOUBLE ) cast1_to_d(cp) ;
+ 	    sp->type = C_DOUBLE ;
+ 	    sp->dval = cp->dval ;
X              cp->dval -= 1.0 ;
X              break ;
***************
*** 699,705 ****
X          case F_POST_INC  :
X              cp = (CELL *) sp->ptr ;
!             (void) cellcpy(sp, cellcpy(&tc, cp) ) ;
!             cast1_to_d(&tc) ;
!             tc.dval += 1.0 ;
X              field_assign(cp, &tc) ;
X              break ;
--- 755,763 ----
X          case F_POST_INC  :
X              cp = (CELL *) sp->ptr ;
! 	    (void) cellcpy(&tc, cp) ;
! 	    cast1_to_d(&tc) ;
! 	    sp->type = C_DOUBLE ;
! 	    sp->dval = tc.dval ;
! 	    tc.dval += 1.0 ;
X              field_assign(cp, &tc) ;
X              break ;
***************
*** 707,713 ****
X          case F_POST_DEC  :
X              cp = (CELL *) sp->ptr ;
!             (void) cellcpy(sp, cellcpy(&tc, cp) ) ;
!             cast1_to_d(&tc) ;
!             tc.dval -= 1.0 ;
X              field_assign(cp, &tc) ;
X              break ;
--- 765,773 ----
X          case F_POST_DEC  :
X              cp = (CELL *) sp->ptr ;
! 	    (void) cellcpy(&tc, cp) ;
! 	    cast1_to_d(&tc) ;
! 	    sp->type = C_DOUBLE ;
! 	    sp->dval = tc.dval ;
! 	    tc.dval -= 1.0 ;
X              field_assign(cp, &tc) ;
X              break ;
***************
*** 715,721 ****
X          case F_PRE_INC :
X              cp = (CELL *) sp->ptr ;
!             cast1_to_d(cellcpy(&tc, cp)) ;
!             sp->dval = tc.dval += 1.0 ;
!             sp->type = C_DOUBLE ;
X              field_assign(cp, sp) ;
X              break ;
--- 775,780 ----
X          case F_PRE_INC :
X              cp = (CELL *) sp->ptr ;
!             cast1_to_d(cellcpy(sp, cp)) ;
!             sp->dval += 1.0 ;
X              field_assign(cp, sp) ;
X              break ;
***************
*** 723,729 ****
X          case F_PRE_DEC :
X              cp = (CELL *) sp->ptr ;
!             cast1_to_d(cellcpy(&tc, cp)) ;
!             sp->dval = tc.dval -= 1.0 ;
!             sp->type = C_DOUBLE ;
X              field_assign(cp, sp) ;
X              break ;
--- 782,787 ----
X          case F_PRE_DEC :
X              cp = (CELL *) sp->ptr ;
!             cast1_to_d(cellcpy(sp, cp)) ;
!             sp->dval -= 1.0 ;
X              field_assign(cp, sp) ;
X              break ;
***************
*** 1062,1066 ****
X    register CELL *cp ;
X  { int k ;
-   CELL *dp, *sp ;
X  
X  reswitch :
--- 1120,1123 ----
***************
*** 1075,1078 ****
--- 1132,1137 ----
X      
X      case TWO_STRINGS :
+     case STRING_AND_STRNUM :
+     two_s:
X              k = strcmp(string(cp)->str, string(cp+1)->str) ;
X              free_STRING( string(cp) ) ;
***************
*** 1080,1094 ****
X              return k ;
X  
-     case STRING_AND_STRNUM :  /* posix numeric string bozosity */
-     case  NOINIT_AND_STRING  :
-     case  DOUBLE_AND_STRING  :
-             if ( cp->type  == C_STRING ) { sp = cp ; dp = cp+1 ; }
-             else { dp = cp ; sp = cp+1 ; }
- 
-             check_strnum(sp) ;
-             if ( sp->type == C_STRING ) cast1_to_s(dp) ;
-             goto reswitch ;
- 
- 
X      case  NOINIT_AND_DOUBLE  :
X      case  NOINIT_AND_STRNUM  :
--- 1139,1142 ----
***************
*** 1097,1100 ****
--- 1145,1151 ----
X              cast2_to_d(cp) ; goto two_d ;
X  
+     case  NOINIT_AND_STRING  :
+     case  DOUBLE_AND_STRING  :
+             cast2_to_s(cp) ; goto two_s ;
X  
X      case  TWO_MBSTRNS :
*** mawk/fcall.c	Tue Mar  3 17:23:16 1992
--- mawk112/fcall.c	Tue Apr  7 12:56:14 1992
***************
*** 12,19 ****
X  
X  
! /*$Log:	fcall.c,v $
!  * Revision 5.1  91/12/05  07:55:54  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /*$Log: fcall.c,v $
!  * Revision 5.1  1991/12/05  07:55:54  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/field.c	Tue Mar  3 17:23:18 1992
--- mawk112/field.c	Mon Aug 17 07:17:22 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	field.c,v $
!  * Revision 5.1  91/12/05  07:55:57  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,24 ----
X  ********************************************/
X  
! /* $Log: field.c,v $
!  * Revision 5.3  1992/08/17  14:21:10  brennan
!  * patch2: After parsing, only bi_sprintf() uses string_buff.
!  *
!  * Revision 5.2  1992/07/10  16:17:10  brennan
!  * MsDOS: remove NO_BINMODE macro
!  *
!  * Revision 5.1  1991/12/05  07:55:57  brennan
X   * 1.1 pre-release
!  *
X  */
X  
***************
*** 313,321 ****
X  	     it could still damage us. Test it .
X  	  */
!           string_buff[256] = 0 ;
!           (void) sprintf(string_buff, 
!              string(fp)->str, 3.1459) ;
!           if ( string_buff[256] )
!                 rt_error("CONVFMT assigned unusable value") ;
X          }
X          break ;
--- 319,328 ----
X  	     it could still damage us. Test it .
X  	  */
!           char xbuff[512] ;
! 
! 	  xbuff[256] = 0 ;
!           (void) sprintf( xbuff, string(fp)->str, 3.1459) ;
!           if ( xbuff[256] ) 
! 	      rt_error("CONVFMT assigned unusable value") ;
X          }
X          break ;
***************
*** 406,417 ****
X  	else /* its a double */
X  	{ int ival ;
X  
X  	  if ( (double)(ival = (int)cp->dval) == cp->dval )
! 	    (void) sprintf(string_buff, "%d", ival) ;
X  	  else
! 	    (void) sprintf(string_buff,
! 			   string(CONVFMT)->str, cp->dval) ;
X  
! 	  cp->ptr = (PTR) new_STRING(string_buff) ;
X          }
X        }
--- 413,424 ----
X  	else /* its a double */
X  	{ int ival ;
+ 	  char xbuff[260] ;
X  
X  	  if ( (double)(ival = (int)cp->dval) == cp->dval )
! 	    (void) sprintf(xbuff, "%d", ival) ;
X  	  else
! 	    (void) sprintf(xbuff, string(CONVFMT)->str, cp->dval) ;
X  
! 	  cp->ptr = (PTR) new_STRING(xbuff) ;
X          }
X        }
***************
*** 570,574 ****
X  
X  
! #if  MSDOS && NO_BINMODE==0
X  
X  int binmode()  /* read current value of BINMODE */
--- 577,581 ----
X  
X  
! #if  MSDOS 
X  
X  int binmode()  /* read current value of BINMODE */
*** mawk/field.h	Tue Mar  3 17:23:18 1992
--- mawk112/field.h	Tue Apr  7 12:56:16 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	field.h,v $
!  * Revision 5.2  92/01/06  08:10:24  brennan
X   * set_binmode() proto for MSDOS
!  * 
X   * Revision 5.1  91/12/05  07:59:16  brennan
X   * 1.1 pre-release
--- 11,18 ----
X  ********************************************/
X  
! /* $Log: field.h,v $
!  * Revision 5.2  1992/01/06  08:10:24  brennan
X   * set_binmode() proto for MSDOS
!  *
X   * Revision 5.1  91/12/05  07:59:16  brennan
X   * 1.1 pre-release
*** mawk/files.c	Tue Mar  3 17:23:20 1992
--- mawk112/files.c	Fri Jul 10 09:07:45 1992
***************
*** 2,6 ****
X  /********************************************
X  files.c
! copyright 1991, Michael D. Brennan
X  
X  This is a source file for mawk, an implementation of
--- 2,6 ----
X  /********************************************
X  files.c
! copyright 1991, 1992.  Michael D. Brennan
X  
X  This is a source file for mawk, an implementation of
***************
*** 11,15 ****
X  ********************************************/
X  
! /*$Log:	files.c,v $
X   * Revision 5.1  91/12/05  07:56:00  brennan
X   * 1.1 pre-release
--- 11,29 ----
X  ********************************************/
X  
! /*$Log: files.c,v $
!  * Revision 5.4  1992/07/10  16:10:30  brennan
!  * patch2
!  * MsDOS: remove useless NO_BINMODE macro
!  * get process exit code on in pipes
!  *
!  * Revision 5.3  1992/04/07  20:21:17  brennan
!  * patch 2
!  * unbuffered output to a tty
!  *
!  * Revision 5.2  1992/04/07  16:03:08  brennan
!  * patch 2
!  * allow same filename for output and input, but use different descriptors
!  * E.g. < "/dev/tty" and > "/dev/tty"
!  *
X   * Revision 5.1  91/12/05  07:56:00  brennan
X   * 1.1 pre-release
***************
*** 24,27 ****
--- 38,45 ----
X  #include "fin.h"
X  
+ static FILE  *PROTO(tfopen, (char*,char*)) ;
+ static  void  PROTO(add_to_child_list, (int,int)) ;
+ static struct child *PROTO(remove_from_child_list, (int)) ;
+ extern int PROTO(isatty, (int)) ;
X  
X  #ifdef  V7
***************
*** 47,52 ****
X  STRING  *name ;
X  short type ;
! int pid ;  /* we need to wait() when we close an out pipe */
X             /* holds temp file index under MSDOS */
X  PTR   ptr ;  /* FIN*   or  FILE*   */
X  }  FILE_NODE ;
--- 65,75 ----
X  STRING  *name ;
X  short type ;
! int pid ;  /* we need to wait() when we close a pipe */
X             /* holds temp file index under MSDOS */
+ 
+ #if  HAVE_FAKE_PIPES
+ int inpipe_exit ; 
+ #endif
+ 
X  PTR   ptr ;  /* FIN*   or  FILE*   */
X  }  FILE_NODE ;
***************
*** 63,66 ****
--- 86,100 ----
X  }
X  
+ /* fopen() but no buffering to ttys */
+ static FILE *tfopen(name, mode)
+   char *name, *mode ;
+ {
+   FILE *retval = fopen(name,mode) ;
+ 
+   if ( retval && isatty(fileno(retval)) )  setbuf(retval, (char*)0) ;
+   return retval ;
+ }
+ 
+ /* find a file on file_list */
X  PTR  file_find( sval, type )
X    STRING *sval ;
***************
*** 75,83 ****
X      if ( !p )   /* open a new one */
X      {
!       p = (FILE_NODE*) zmalloc(sizeof(FILE_NODE)) ;
X        switch( p->type = type )
X        {
X          case  F_TRUNC :
! #if MSDOS && NO_BINMODE==0
X              ostr = (binmode()&2) ? "wb" : "w" ;
X  #else
--- 109,117 ----
X      if ( !p )   /* open a new one */
X      {
!       p = ZMALLOC(FILE_NODE) ; 
X        switch( p->type = type )
X        {
X          case  F_TRUNC :
! #if MSDOS 
X              ostr = (binmode()&2) ? "wb" : "w" ;
X  #else
***************
*** 84,88 ****
X              ostr = "w" ;
X  #endif
!             if ( !(p->ptr = (PTR) fopen(name, ostr)) )
X                  goto out_failure ;
X              break ;
--- 118,122 ----
X              ostr = "w" ;
X  #endif
!             if ( !(p->ptr = (PTR) tfopen(name, ostr)) )
X                  goto out_failure ;
X              break ;
***************
*** 89,93 ****
X  
X          case  F_APPEND :
! #if MSDOS && NO_BINMODE==0
X              ostr = (binmode()&2) ? "ab" : "a" ;
X  #else
--- 123,127 ----
X  
X          case  F_APPEND :
! #if MSDOS 
X              ostr = (binmode()&2) ? "ab" : "a" ;
X  #else
***************
*** 94,98 ****
X              ostr = "a" ;
X  #endif
!             if ( !(p->ptr = (PTR) fopen(name, ostr)) )
X                  goto out_failure ;
X              break ;
--- 128,132 ----
X              ostr = "a" ;
X  #endif
!             if ( !(p->ptr = (PTR) tfopen(name, ostr)) )
X                  goto out_failure ;
X              break ;
***************
*** 130,137 ****
X      }
X  
!     if ( strcmp(name, p->name->str) == 0 )
!     { /* no distinction between F_APPEND and F_TRUNC here */
!       if ( p->type != type && 
!            (p->type < F_APPEND || type < F_APPEND))  goto type_failure ;
X        if ( !q )  /*at front of list */
X            return  p->ptr ;
--- 164,174 ----
X      }
X  
!     /* search is by name and type */
!     if ( strcmp(name, p->name->str) == 0 &&
! 	 ( p->type == type ||
!            /* no distinction between F_APPEND and F_TRUNC here */
! 	   p->type >= F_APPEND && type >= F_APPEND ))
! 
!     { /* found */
X        if ( !q )  /*at front of list */
X            return  p->ptr ;
***************
*** 138,145 ****
X        /* delete from list for move to front */
X        q->link = p->link ;
!       break ;
X      }
X      q = p ; p = p->link ;
!   }
X  
X    /* put p at the front of the list */
--- 175,182 ----
X        /* delete from list for move to front */
X        q->link = p->link ;
!       break ; /* while loop */
X      }
X      q = p ; p = p->link ;
!   } /* end while loop */
X  
X    /* put p at the front of the list */
***************
*** 151,161 ****
X    mawk_exit(1) ;
X  
- type_failure :
-   rt_error("use of file \"%s\"\n\tis inconsistent with previous use",
-            name) ;
X  }
X  
X  
! /* close a file and delete it's node from the file_list */
X  
X  int  file_close( sval )
--- 188,198 ----
X    mawk_exit(1) ;
X  
X  }
X  
X  
! /* Close a file and delete it's node from the file_list.
!    Walk the whole list, in case a name has two nodes,
!    e.g. < "/dev/tty" and > "/dev/tty"
! */
X  
X  int  file_close( sval )
***************
*** 163,168 ****
X  { register FILE_NODE *p = file_list ;
X    FILE_NODE *q = (FILE_NODE *) 0 ; /* trails p */
X    char *name = sval->str ;
!   int retval = 0 ;
X  
X    while ( p )
--- 200,206 ----
X  { register FILE_NODE *p = file_list ;
X    FILE_NODE *q = (FILE_NODE *) 0 ; /* trails p */
+   FILE_NODE *hold ;
X    char *name = sval->str ;
!   int retval = -1 ;
X  
X    while ( p )
***************
*** 174,177 ****
--- 212,216 ----
X              case  F_APPEND :    
X                  (void) fclose((FILE *) p->ptr) ;
+ 		retval = 0 ;
X                  break ;
X  
***************
*** 189,192 ****
--- 228,232 ----
X              case F_IN  :
X                  FINclose((FIN *) p->ptr) ;
+ 		retval = 0 ;
X                  break ;
X  
***************
*** 199,202 ****
--- 239,243 ----
X  #if  HAVE_FAKE_PIPES
X                  (void) unlink(tmp_file_name(p->pid)) ;
+ 		retval = p->inpipe_exit ;
X  #endif
X                  break ;
***************
*** 204,217 ****
X  
X            free_STRING(p->name) ;
!           if ( q )  q->link = p->link ;
!           else  file_list = p->link ;
X  
!           zfree(p, sizeof(FILE_NODE)) ;
!           return retval ;
X          }
X          else { q = p ; p = p->link ; }
X  
!   /* its not on the list */
!   return -1 ;
X  }
X  
--- 245,257 ----
X  
X            free_STRING(p->name) ;
! 	  hold = p ;
!           if ( q )  q->link = p = p->link ;
!           else  file_list = p = p->link ;
X  
!           ZFREE(hold) ;
X          }
X          else { q = p ; p = p->link ; }
X  
!   return retval ;
X  }
X  
*** mawk/files.h	Tue Mar  3 17:23:20 1992
--- mawk112/files.h	Tue Apr  7 12:56:17 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /*$Log:	files.h,v $
!  * Revision 5.1  91/12/05  07:59:18  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,18 ----
X  ********************************************/
X  
! /*$Log: files.h,v $
!  * Revision 5.1  1991/12/05  07:59:18  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/fin.c	Tue Mar  3 17:29:06 1992
--- mawk112/fin.c	Tue Aug 11 07:40:14 1992
***************
*** 2,6 ****
X  /********************************************
X  fin.c
! copyright 1991, Michael D. Brennan
X  
X  This is a source file for mawk, an implementation of
--- 2,6 ----
X  /********************************************
X  fin.c
! copyright 1991, 1992.  Michael D. Brennan
X  
X  This is a source file for mawk, an implementation of
***************
*** 11,19 ****
X  ********************************************/
X  
! /*$Log:	fin.c,v $
!  * Revision 5.2  92/02/21  13:30:08  brennan
!  * fixed bug that free'd FILENAME twice if 
X   * command line was var=value only
!  * 
X   * Revision 5.1  91/12/05  07:56:02  brennan
X   * 1.1 pre-release
--- 11,29 ----
X  ********************************************/
X  
! /*$Log: fin.c,v $
!  * Revision 5.5  1992/07/28  15:11:30  brennan
!  * minor change in finding eol, needed for MsDOS
!  *
!  * Revision 5.4  1992/07/10  16:17:10  brennan
!  * MsDOS: remove NO_BINMODE macro
!  *
!  * Revision 5.3  1992/07/08  16:14:27  brennan
!  * FILENAME and FNR retain last values in the
!  * END block.
!  *
!  * Revision 5.2  1992/02/21  13:30:08  brennan
!  * fixed bug that free'd FILENAME twice if
X   * command line was var=value only
!  *
X   * Revision 5.1  91/12/05  07:56:02  brennan
X   * 1.1 pre-release
***************
*** 35,39 ****
X  #endif
X  
! /* This file handles input buffering */
X  
X  #ifndef MSDOS_MSC
--- 45,52 ----
X  #endif
X  
! /* This file handles input files.  Opening, closing,
!    buffering and (most important) splitting files into
!    records, FINgets().
! */
X  
X  #ifndef MSDOS_MSC
***************
*** 77,81 ****
X    int oflag = O_RDONLY ;
X  
! #if  MSDOS && NO_BINMODE==0
X    int bm = binmode() & 1 ;
X    if ( bm ) oflag |= O_BINARY ;
--- 90,94 ----
X    int oflag = O_RDONLY ;
X  
! #if  MSDOS 
X    int bm = binmode() & 1 ;
X    if ( bm ) oflag |= O_BINARY ;
***************
*** 84,88 ****
X    if ( filename[0] == '-' && filename[1] == 0 )
X    {
! #if  MSDOS  &&  NO_BINMODE==0
X       if ( bm )  setmode(0, O_BINARY) ;
X  #endif
--- 97,101 ----
X    if ( filename[0] == '-' && filename[1] == 0 )
X    {
! #if  MSDOS  
X       if ( bm )  setmode(0, O_BINARY) ;
X  #endif
***************
*** 160,165 ****
X        else  /* return this line */
X        {
!         if ( !(p = strchr(fin->buff, '\n')) )
!              p = fin->buff + BUFFSZ + 1 ; /* unlikely to occur */
X  
X          *p = 0 ; *len_p = p - fin->buff ;
--- 173,179 ----
X        else  /* return this line */
X        {
! 	/* find eol */
! 	p = fin->buff ;
! 	while ( *p != '\n' && *p != 0 )  p++ ;
X  
X          *p = 0 ; *len_p = p - fin->buff ;
***************
*** 340,343 ****
--- 354,360 ----
X      FILENAME->type = C_STRING ;
X      FILENAME->ptr = (PTR) new_STRING( "-") ;
+     cell_destroy(FNR) ;
+     FNR->type = C_DOUBLE ;
+     FNR->dval = 0.0 ;
X      main_fin = FINdopen(0, 1) ;
X  }
***************
*** 344,351 ****
X     
X  
X  void  open_main()  
X  { CELL argc ;
X  
! #if  MSDOS && NO_BINMODE==0   /* set input modes */
X    int k = binmode() ;
X  
--- 361,372 ----
X     
X  
+ /* this gets called once to get the input stream going.
+    It is called after the execution of the BEGIN block
+    unless there is a getline inside BEGIN {}
+ */
X  void  open_main()  
X  { CELL argc ;
X  
! #if  MSDOS 
X    int k = binmode() ;
X  
***************
*** 361,364 ****
--- 382,386 ----
X  }
X  
+ /* get the next command line file open */
X  static  FIN  *next_main(open_flag)
X    int open_flag ; /* called by open_main() if on */
***************
*** 374,384 ****
X  
X    if ( main_fin )  FINclose(main_fin) ;
!   cell_destroy( FILENAME ) ;
!   FILENAME->type = C_NOINIT ; 
!      /* so don't free again if we go to set_main_to_stdin() */
!   cell_destroy( FNR ) ;
!   FNR->type = C_DOUBLE ;
!   FNR->dval = 0.0 ;
X  
X    if ( cellcpy(&argc, ARGC)->type != C_DOUBLE )
X            cast1_to_d(&argc) ;
--- 396,403 ----
X  
X    if ( main_fin )  FINclose(main_fin) ;
!   /* FILENAME and FNR don't change unless we really open
!      a new file */
X  
+   /* make a copy of ARGC to avoid side effect */
X    if ( cellcpy(&argc, ARGC)->type != C_DOUBLE )
X            cast1_to_d(&argc) ;
***************
*** 397,400 ****
--- 416,420 ----
X      if ( cp->type < C_STRING )  cast1_to_s(cp) ;
X      if ( string(cp)->len == 0 )  continue ;
+ 	      /* file argument is "" */
X  
X      /* it might be a command line assignment */
***************
*** 405,411 ****
X      if ( ! (main_fin = FINopen( string(cp)->str, 1 )) ) mawk_exit(1) ;
X  
!     /* success */
X      (void) cellcpy(FILENAME , cp ) ;
X      free_STRING( string(cp) ) ;
X      return  main_fin ;
X    }
--- 425,436 ----
X      if ( ! (main_fin = FINopen( string(cp)->str, 1 )) ) mawk_exit(1) ;
X  
!     /* success -- set FILENAME and FNR */
!     cell_destroy(FILENAME) ;
X      (void) cellcpy(FILENAME , cp ) ;
X      free_STRING( string(cp) ) ;
+     cell_destroy(FNR) ;
+     FNR->type = C_DOUBLE ;
+     FNR->dval = 0.0 ;
+ 
X      return  main_fin ;
X    }
***************
*** 417,423 ****
X      
X    /* real failure */
-   FILENAME->type = C_STRING ;
-   FILENAME->ptr = (PTR) new_STRING( "" ) ;
- 
X    { /* this is how we mark EOF on main_fin  */
X      static char dead_buff = 0 ;
--- 442,445 ----
*** mawk/fin.h	Tue Mar  3 17:23:22 1992
--- mawk112/fin.h	Tue Apr  7 12:56:19 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /*$Log:	fin.h,v $
!  * Revision 5.2  92/01/06  08:16:24  brennan
X   * setmode() proto for MSDOS
!  * 
X   * Revision 5.1  91/12/05  07:59:20  brennan
X   * 1.1 pre-release
--- 11,18 ----
X  ********************************************/
X  
! /*$Log: fin.h,v $
!  * Revision 5.2  1992/01/06  08:16:24  brennan
X   * setmode() proto for MSDOS
!  *
X   * Revision 5.1  91/12/05  07:59:20  brennan
X   * 1.1 pre-release
*** mawk/hash.c	Tue Mar  3 17:23:24 1992
--- mawk112/hash.c	Tue Apr  7 12:56:20 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	hash.c,v $
!  * Revision 5.1  91/12/05  07:56:05  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /* $Log: hash.c,v $
!  * Revision 5.1  1991/12/05  07:56:05  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/init.c	Tue Mar  3 17:23:24 1992
--- mawk112/init.c	Fri Jul 10 09:17:41 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	init.c,v $
!  * Revision 5.2  92/01/09  08:46:14  brennan
X   * small change for MSC
!  * 
X   * Revision 5.1  91/12/05  07:56:07  brennan
X   * 1.1 pre-release
--- 12,22 ----
X  
X  
! /* $Log: init.c,v $
!  * Revision 5.3  1992/07/10  16:17:10  brennan
!  * MsDOS: remove NO_BINMODE macro
!  *
!  * Revision 5.2  1992/01/09  08:46:14  brennan
X   * small change for MSC
!  *
X   * Revision 5.1  91/12/05  07:56:07  brennan
X   * 1.1 pre-release
***************
*** 65,69 ****
X  #endif 
X  
! #if   MSDOS  &&  NO_BINMODE==0
X    { char *p = getenv("MAWKBINMODE") ;
X  
--- 68,72 ----
X  #endif 
X  
! #if   MSDOS  
X    { char *p = getenv("MAWKBINMODE") ;
X  
***************
*** 167,171 ****
X  	      }
X  	    }
! #if  MSDOS  &&  NO_BINMODE==0
X  	    else
X  	    if ( optarg[0] == 'B' )
--- 170,174 ----
X  	      }
X  	    }
! #if  MSDOS  
X  	    else
X  	    if ( optarg[0] == 'B' )
*** mawk/init.h	Tue Mar  3 17:23:26 1992
--- mawk112/init.h	Tue Apr  7 12:56:21 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	init.h,v $
!  * Revision 5.1  91/12/05  07:59:22  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,18 ----
X  ********************************************/
X  
! /* $Log: init.h,v $
!  * Revision 5.1  1991/12/05  07:59:22  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/jmp.c	Tue Mar  3 17:23:26 1992
--- mawk112/jmp.c	Tue Apr  7 12:56:22 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	jmp.c,v $
!  * Revision 5.1  91/12/05  07:56:10  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,18 ----
X  ********************************************/
X  
! /* $Log: jmp.c,v $
!  * Revision 5.1  1991/12/05  07:56:10  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/jmp.h	Tue Mar  3 17:23:28 1992
--- mawk112/jmp.h	Tue Apr  7 12:56:23 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	jmp.h,v $
!  * Revision 5.1  91/12/05  07:59:24  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,18 ----
X  ********************************************/
X  
! /* $Log: jmp.h,v $
!  * Revision 5.1  1991/12/05  07:59:24  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/kw.c	Tue Mar  3 17:23:28 1992
--- mawk112/kw.c	Tue Apr  7 12:56:24 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	kw.c,v $
!  * Revision 5.1  91/12/05  07:56:12  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /* $Log: kw.c,v $
!  * Revision 5.1  1991/12/05  07:56:12  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/main.c	Tue Mar  3 17:23:28 1992
--- mawk112/main.c	Tue Apr  7 12:56:25 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	main.c,v $
!  * Revision 5.1  91/12/05  07:56:14  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,18 ----
X  ********************************************/
X  
! /* $Log: main.c,v $
!  * Revision 5.1  1991/12/05  07:56:14  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/makescan.c	Tue Mar  3 17:23:30 1992
--- mawk112/makescan.c	Tue Apr  7 12:56:25 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /*$Log:	makescan.c,v $
!  * Revision 5.1  91/12/05  07:56:16  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,18 ----
X  ********************************************/
X  
! /*$Log: makescan.c,v $
!  * Revision 5.1  1991/12/05  07:56:16  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/matherr.c	Tue Mar  3 17:23:30 1992
--- mawk112/matherr.c	Tue Apr  7 12:56:26 1992
***************
*** 11,15 ****
X  ********************************************/
X  
! /*$Log:	matherr.c,v $
X   * Revision 5.1  91/12/05  07:56:18  brennan
X   * 1.1 pre-release
--- 11,20 ----
X  ********************************************/
X  
! /*$Log: matherr.c,v $
!  * Revision 5.2  1992/03/31  16:14:44  brennan
!  * patch2:
!  * TURN_ON_FPE_TRAPS() macro
!  * USE_IEEEFP_H macro
!  *
X   * Revision 5.1  91/12/05  07:56:18  brennan
X   * 1.1 pre-release
***************
*** 20,23 ****
--- 25,32 ----
X  #include  <math.h>
X  
+ #ifdef  USE_IEEEFP_H
+ #include <ieeefp.h>
+ #endif
+ 
X  #if   FPE_TRAPS_ON
X  #include <signal.h>
***************
*** 53,57 ****
X  
X  void   fpe_init()
! { (void) signal(SIGFPE, fpe_catch) ; }
X  
X  #else  /* FPE_TRAPS_ON==0 */
--- 62,69 ----
X  
X  void   fpe_init()
! { 
!   TURN_ON_FPE_TRAPS() ;
!   (void) signal(SIGFPE, fpe_catch) ; 
! }
X  
X  #else  /* FPE_TRAPS_ON==0 */
*** mawk/mawk.h	Tue Mar  3 17:29:10 1992
--- mawk112/mawk.h	Mon Jul  6 13:12:32 1992
***************
*** 2,6 ****
X  /********************************************
X  mawk.h
! copyright 1991, Michael D. Brennan
X  
X  This is a source file for mawk, an implementation of
--- 2,6 ----
X  /********************************************
X  mawk.h
! copyright 1991 1992, Michael D. Brennan
X  
X  This is a source file for mawk, an implementation of
***************
*** 12,19 ****
X  
X  
! /*   $Log:	mawk.h,v $
!  * Revision 5.4  92/03/03  16:34:41  brennan
X   * conditional around open() proto
!  * 
X   * Revision 5.3  92/01/09  08:46:58  brennan
X   * cell destroy macro
--- 12,22 ----
X  
X  
! /*   $Log: mawk.h,v $
!  * Revision 5.5  1992/07/06  20:15:49  brennan
!  * DONT_PROTO_OPEN macro
!  *
!  * Revision 5.4  1992/03/03  16:34:41  brennan
X   * conditional around open() proto
!  *
X   * Revision 5.3  92/01/09  08:46:58  brennan
X   * cell destroy macro
***************
*** 157,164 ****
X  
X  /* ANSI compilers won't like open() if they've ever seen open as
!    int open(char *,int, ...).  If so remove it.
X  */
X  
! #ifndef _IBMR2 /* AIX */
X  int   PROTO( open, (char *,int, int) ) ;
X  #endif
--- 160,168 ----
X  
X  /* ANSI compilers won't like open() if they've ever seen open as
!    int open(char *,int, ...).  If so , 
!    #define DONT_PROTO_OPEN
X  */
X  
! #ifndef DONT_PROTO_OPEN
X  int   PROTO( open, (char *,int, int) ) ;
X  #endif
*** mawk/memory.c	Tue Mar  3 17:23:32 1992
--- mawk112/memory.c	Tue Apr  7 12:56:28 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	memory.c,v $
!  * Revision 5.1  91/12/05  07:56:21  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /* $Log: memory.c,v $
!  * Revision 5.1  1991/12/05  07:56:21  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/memory.h	Tue Mar  3 17:23:34 1992
--- mawk112/memory.h	Tue Apr  7 12:56:29 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	memory.h,v $
!  * Revision 5.1  91/12/05  07:59:28  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /* $Log: memory.h,v $
!  * Revision 5.1  1991/12/05  07:59:28  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/modbison.awk	Tue Mar  3 17:23:02 1992
--- mawk112/modbison.awk	Thu Jun 11 13:30:15 1992
***************
*** 7,11 ****
X  # the most portable solution is to #if 0  it out
X  #
! # This script only works with bison 1.14
X  #
X  
--- 7,11 ----
X  # the most portable solution is to #if 0  it out
X  #
! # This script works with bison 1.14 and 1.18
X  #
X  
*** mawk/packing.list	Tue Mar  3 17:28:52 1992
--- mawk112/packing.list	Wed Aug 26 21:05:58 1992
***************
*** 1,5 ****
X  
X  ################################################
! # These files form the mawk distribution 1.1.1
X  #
X  # Mawk is an implementation of the AWK Programming Language as
--- 1,5 ----
X  
X  ################################################
! # These files form the mawk distribution 1.1.2
X  #
X  # Mawk is an implementation of the AWK Programming Language as
***************
*** 12,16 ****
X  README			description of mawk 1.1
X  NEW			changes from 1.0 to 1.1
! PATCHES			changes from 1.1 to 1.1.1
X  INSTALL			installation instructions
X  COPYING			GNU General Public License, version 2	
--- 12,16 ----
X  README			description of mawk 1.1
X  NEW			changes from 1.0 to 1.1
! PATCHES			changes from 1.1 to 1.1.2
X  INSTALL			installation instructions
X  COPYING			GNU General Public License, version 2	
***************
*** 103,106 ****
--- 103,107 ----
X  config/sysV_ieeefp.h
X  config/sysV.h
+ config/sysVr4i386.h
X  config/msc_dos.h
X  config/think_c.h
***************
*** 111,114 ****
--- 112,117 ----
X  config/sgi.h
X  config/apollo.h
+ config/convex.h
+ config/aix.h
X  #######################
X  # directory:  test      testing and benchmarking directory
*** mawk/parse.y	Tue Mar  3 17:23:38 1992
--- mawk112/parse.y	Sat Aug  8 10:13:38 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	parse.y,v $
!  * Revision 5.2  92/01/08  16:11:42  brennan
X   * code FE_PUSHA carefully for MSDOS large mode
!  * 
X   * Revision 5.1  91/12/05  07:50:22  brennan
X   * 1.1 pre-release
--- 11,25 ----
X  ********************************************/
X  
! /* $Log: parse.y,v $
!  * Revision 5.4  1992/08/08  17:17:20  brennan
!  * patch 2: improved timing of error recovery in
!  * bungled function definitions. Fixes a core dump
!  *
!  * Revision 5.3  1992/07/08  15:43:41  brennan
!  * patch2: length returns.  I am a wimp
!  *
!  * Revision 5.2  1992/01/08  16:11:42  brennan
X   * code FE_PUSHA carefully for MSDOS large mode
!  *
X   * Revision 5.1  91/12/05  07:50:22  brennan
X   * 1.1 pre-release
***************
*** 111,115 ****
X  %token  <stp> ID   D_ID
X  %token  <fbp> FUNCT_ID
! %token  <bip> BUILTIN 
X  %token   <cp>  FIELD 
X  
--- 118,122 ----
X  %token  <stp> ID   D_ID
X  %token  <fbp> FUNCT_ID
! %token  <bip> BUILTIN  LENGTH
X  %token   <cp>  FIELD 
X  
***************
*** 147,155 ****
X  program_block :  PA_block   /* pattern-action */
X                |  function_def
!               |  error block
!                  { if (scope == SCOPE_FUNCT)
!                    { restore_ids() ; scope = SCOPE_MAIN ; }
!                    code_ptr = main_code_ptr ;
!                  }
X                ;
X  
--- 154,158 ----
X  program_block :  PA_block   /* pattern-action */
X                |  function_def
!               |  outside_error block
X                ;
X  
***************
*** 417,420 ****
--- 420,428 ----
X            code2(_BUILTIN , p->fp) ;
X          }
+ 	| LENGTH   /* this is an irritation */
+ 	  {
+ 	    code1(_PUSHINT) ; code1(0) ;
+ 	    code2(_BUILTIN, $1->fp) ;
+ 	  }
X          ;
X  
***************
*** 975,978 ****
--- 983,1003 ----
X                }
X             ;
+ 
+ outside_error :  error
+                  {  /* we may have to recover from a bungled function
+ 		       definition */
+ 
+ 		   /* can have local ids, before code scope
+ 		      changes  */
+ 		    restore_ids() ;
+ 
+ 		    if (scope == SCOPE_FUNCT)
+                     { scope = SCOPE_MAIN ; 
+ 		      active_funct = (FBLOCK*) 0 ;
+ 		    }
+ 
+ 		    code_ptr = main_code_ptr ;
+                  }
+ 	     ;
X  
X  /* a call to a user defined function */
*** mawk/parse2.xc	Tue Mar  3 17:23:38 1992
--- mawk112/parse2.xc	Tue Apr  7 12:56:32 1992
***************
*** 11,16 ****
X  ********************************************/
X  
! /* $Log:	parse2.xc,v $
! Revision 5.1  91/12/05  07:52:38  brennan
X  1.1 pre-release
X  
--- 11,16 ----
X  ********************************************/
X  
! /* $Log: parse2.xc,v $
! Revision 5.1  1991/12/05  07:52:38  brennan
X  1.1 pre-release
X  
*** mawk/patchlev.h	Tue Mar  3 17:29:14 1992
--- mawk112/patchlev.h	Wed Aug 26 20:06:41 1992
***************
*** 1,3 ****
X  /* mawk 1.1 */
! #define  PATCHLEVEL	1
! #define  PATCH_STRING	".1"
--- 1,3 ----
X  /* mawk 1.1 */
! #define  PATCHLEVEL	2
! #define  PATCH_STRING	".2"
*** mawk/print.c	Tue Mar  3 17:29:16 1992
--- mawk112/print.c	Mon Aug 17 07:19:34 1992
***************
*** 11,19 ****
X  ********************************************/
X  
! /* $Log:	print.c,v $
!  * Revision 5.2  92/02/24  10:52:16  brennan
X   * printf and sprintf() can now have more args than % conversions
X   * removed HAVE_PRINTF_HD -- it was too obscure
!  * 
X   * Revision 5.1  91/12/05  07:56:22  brennan
X   * 1.1 pre-release
--- 11,22 ----
X  ********************************************/
X  
! /* $Log: print.c,v $
!  * Revision 5.3  1992/08/17  14:23:21  brennan
!  * patch2: After parsing, only bi_sprintf() uses string_buff.
!  *
!  * Revision 5.2  1992/02/24  10:52:16  brennan
X   * printf and sprintf() can now have more args than % conversions
X   * removed HAVE_PRINTF_HD -- it was too obscure
!  *
X   * Revision 5.1  91/12/05  07:56:22  brennan
X   * 1.1 pre-release
***************
*** 38,41 ****
--- 41,47 ----
X  char *sprintf_buff = string_buff ;
X  char *sprintf_limit = string_buff + SPRINTF_SZ ;
+ 
+ /* Once execute() starts the sprintf code is (belatedly) the only
+    code allowed to use string_buff  */
X  
X  static void print_cell(p, fp)
*** mawk/re_cmpl.c	Tue Mar  3 17:23:42 1992
--- mawk112/re_cmpl.c	Tue Apr  7 12:56:33 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /* $Log:	re_cmpl.c,v $
!  * Revision 5.1  91/12/05  07:56:25  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,18 ----
X  ********************************************/
X  
! /* $Log: re_cmpl.c,v $
!  * Revision 5.1  1991/12/05  07:56:25  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/regexp.h	Tue Mar  3 17:23:42 1992
--- mawk112/regexp.h	Tue Apr  7 12:56:34 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /*$Log:	regexp.h,v $
!  * Revision 5.1  91/12/05  07:59:30  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,18 ----
X  ********************************************/
X  
! /*$Log: regexp.h,v $
!  * Revision 5.1  1991/12/05  07:59:30  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/repl.h	Tue Mar  3 17:23:42 1992
--- mawk112/repl.h	Tue Apr  7 12:56:35 1992
***************
*** 11,18 ****
X  ********************************************/
X  
! /*$Log:	repl.h,v $
!  * Revision 5.1  91/12/05  07:59:32  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 11,18 ----
X  ********************************************/
X  
! /*$Log: repl.h,v $
!  * Revision 5.1  1991/12/05  07:59:32  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/scan.c	Tue Mar  3 17:29:20 1992
--- mawk112/scan.c	Wed Jul  8 08:40:16 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	scan.c,v $
!  * Revision 5.2  92/02/21  14:16:53  brennan
X   * fix:  getline <=
!  * 
X   * Revision 5.1  91/12/05  07:56:27  brennan
X   * 1.1 pre-release
--- 12,22 ----
X  
X  
! /* $Log: scan.c,v $
!  * Revision 5.3  1992/07/08  15:43:41  brennan
!  * patch2: length returns.  I am a wimp
!  *
!  * Revision 5.2  1992/02/21  14:16:53  brennan
X   * fix:  getline <=
!  *
X   * Revision 5.1  91/12/05  07:56:27  brennan
X   * 1.1 pre-release
***************
*** 555,558 ****
--- 558,573 ----
X                        current_token = BUILTIN ;
X                        break ;
+ 
+                 case  ST_LENGTH  :
+ 
+ 		      yylval.bip = stp->stval.bip ;
+ 
+ 		      /* check for length alone, this is an ugly
+ 			 hack */
+                       while ( scan_code[ c = next() ] == SC_SPACE ) ;
+                       un_next() ;
+ 
+ 		      current_token = c == '(' ? BUILTIN : LENGTH ;
+ 		      break ;
X  
X                  case  ST_FIELD  :
*** mawk/scan.h	Tue Mar  3 17:23:44 1992
--- mawk112/scan.h	Tue Apr  7 12:56:36 1992
***************
*** 12,19 ****
X  
X  
! /* $Log:	scan.h,v $
!  * Revision 5.1  91/12/05  07:59:33  brennan
X   * 1.1 pre-release
!  * 
X  */
X  
--- 12,19 ----
X  
X  
! /* $Log: scan.h,v $
!  * Revision 5.1  1991/12/05  07:59:33  brennan
X   * 1.1 pre-release
!  *
X  */
X  
*** mawk/sizes.h	Tue Mar  3 17:23:48 1992
--- mawk112/sizes.h	Wed Aug 26 20:20:29 1992
***************
*** 2,6 ****
X  /********************************************
SHAR_EOF
true || echo 'restore of diffs2 failed'
fi
echo 'End of  part 1'
echo 'File diffs2 is continued in part 2'
echo 2 > _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.221204.9998@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!csr

Show 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: v02i028: mawk - (Ver. 1.1) An interpreter for the AWK language, Patch02a/4
Message-ID: <1992Oct13.221204.9998@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:12:04 GMT
Approved: csr@calvin.dgbt.doc.ca
Lines: 2548