troff/nroff/ditroff end-macro bug

Steve Grandi grandi at noao.UUCP
Thu Oct 16 11:36:34 AEST 1986


Subject: troff/nroff prematurely interrupts end-macro processing
Index:	/usr/src/usr.bin/troff/n7.c 4.3BSD

Description: 
	(The following bug-report and fix are from D'Anne Thompson)

	End-macro processing in troff/nroff/ditroff is being prematurely
interrupted.  Only a single page of text was being ejected upon reaching the
end of input text.  This was the case even when there was diverted material,
notably a floating keep, that should be floated to the top of another new
page.  After investigation it was found that only the current page at the
time of reaching the end-macro was being completed, any additional pages that
might be due to the end-macro processing itself were being suppressed.

Repeat-By:  
	Run the following through troff/nroff using -me

.fo ''Footer''
.pp
A normal paragraph.
A normal paragraph.
A normal paragraph.
A normal paragraph.
A normal paragraph.
A normal paragraph.
A normal paragraph.
A normal paragraph.
.sp 7.0i
.(z
A Floating keep.
It should float to the top of the 
following page.

This should be the second page output, if end-macro
processing is working correctly.

She sells sea shells by the sea shore.
.)z
.pp
A normal paragraph.


Fix:
	file n7.c, subroutine newline()

*** n7.c.ORIG	Thu Aug  5 14:53:14 1982
--- n7.c	Tue Sep 16 16:01:51 1986
***************
*** 423,429 ****
  nl1:
  	ejf = dip->hnl = v.nl = 0;
  	ejl = frame;
! 	if(donef){
  		if((!nc && !wch) || ndone)done1(0);
  		ndone++;
  		donef = 0;
--- 423,429 ----
  nl1:
  	ejf = dip->hnl = v.nl = 0;
  	ejl = frame;
! 	if(donef == 1){
  		if((!nc && !wch) || ndone)done1(0);
  		ndone++;
  		donef = 0;
-- 
Steve Grandi, National Optical Astronomy Observatories, Tucson, AZ, 602-325-9228
{arizona,decvax,hao,ihnp4,seismo}!noao!grandi  grandi%draco at Hamlet.Caltech.Edu



More information about the Comp.bugs.4bsd.ucb-fixes mailing list