*BSD News Article 23218


Return to BSD News archive

Xref: sserve comp.os.386bsd.bugs:1698 alt.sources:6590
Newsgroups: comp.os.386bsd.bugs,alt.sources
Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!elroy.jpl.nasa.gov!swrinde!cs.utexas.edu!utnut!torn!newshub.ccs.yorku.ca!oz
From: oz@ursa.sis.yorku.ca (Ozan S. Yigit)
Subject: fixes. [Re: a much improved version of pd/bsd m4.]
In-Reply-To: oz@ursa.sis.yorku.ca's message of Fri, 29 Oct 1993 05:05:32 GMT
Message-ID: <OZ.93Nov2223636@ursa.sis.yorku.ca>
Sender: news@newshub.ccs.yorku.ca (USENET News System)
Organization: York U. Student Information Systems Project
References: <OZ.93Oct29000532@ursa.sis.yorku.ca>
Date: Wed, 3 Nov 1993 03:36:36 GMT
Lines: 48

bug:if there are multiple files on the command line, file index is not
reset properly, ie. it falls off the side. sigh. also, somewhere along
the line, i again lost the proper m4wrap/autodiversion semantics
[sorry, eric. :-|] but fixed with this patch.

... oz
----------------------------------------------------------------------

*** main.c	Tue Nov  2 15:40:55 1993
--- main.c.new	Tue Nov  2 22:27:04 1993
***************
*** 865,870 ****
--- 865,873 ----
  	    char *name = argv[optind];	/* next file name            */
  	    infile[0] = fopen(name, "r");
  	    if (!infile[0]) cantread(name);
+ 	    sp = -1;			/* stack pointer initialized */
+ 	    fp = 0; 			/* frame pointer initialized */
+ 	    ilevel = 0;			/* reset input file stack ptr*/
  #ifndef	NO__FILE
  	    dodefine("__FILE__", name);
  #endif
***************
*** 877,886 ****
  	    putback(EOF);		/* eof is a must !!	     */
  	    pbstr(m4wraps); 		/* user-defined wrapup act   */
  	    macro();			/* last will and testament   */
- 	} else {			/* default wrap-up: undivert */
- 	    for (n = 1; n < MAXOUT; n++)
- 		if (outfile[n] != NULL) getdiv(n);
  	}
  
  	if (outfile[0] != NULL) {	/* remove bitbucket if used  */
  	    (void) fclose(outfile[0]);
--- 880,892 ----
  	    putback(EOF);		/* eof is a must !!	     */
  	    pbstr(m4wraps); 		/* user-defined wrapup act   */
  	    macro();			/* last will and testament   */
  	}
+ 
+ 	if (active != stdout)
+ 	    active = stdout;		/* reset output just in case */
+ 
+ 	for (n = 1; n < MAXOUT; n++)	/* default wrap-up: undivert */
+ 	    if (outfile[n] != NULL) getdiv(n);
  
  	if (outfile[0] != NULL) {	/* remove bitbucket if used  */
  	    (void) fclose(outfile[0]);