[net.unix-wizards] m4 io a line at a time

FC01@sri-unix (07/02/82)

Date: 21 Jun 1982 2123-PDT
Does some m4 wizard know how to get m4 to output results as soon as it
has them. This would be very nice for implementing a macro processed front
end to programs or the shell, but as far as I can tell it would take some
changes to the yacc and c sources to make it go. If it is possible to do
this externally it would be very nice. Otherwise I'm willing to make the
changes if I can find out what they are.
					Sincerely,
						Fred Cohen

-------

dan@BBN-UNIX@sri-unix (08/02/82)

From: Dan Franklin <dan@BBN-UNIX>
Date:  2 Jul 1982 11:00:29 EDT (Friday)
We made exactly that change so we could use m4 as a front end to adb.
The change was based on the idea that m4 ought to be interactive if
it is reading standard input and standard input is a terminal. The
change was so simple that I might as well give it here. The file is m4.c.

	if (argc>1)
		putbak(0);
/*ADD*/ else if (isatty(0))
/*ADD*/ 	setbuf(stdout, NULL);	/* rfg:bbn mod for interactive */
	for (;;) {
	.
	.
	.
			if (infile[infptr]!=stdin)
				fclose(infile[infptr]);
			if (**argv=='-')
	/*ADD*/ 	{
				infile[infptr] = stdin;
	/*ADD*/ 		if (isatty(0)) /* rfg:bbn mod for interactive */
	/*ADD*/ 			setbuf(stdout, NULL);
	/*ADD*/ 	}

It might be nice to add a command-line option to force interactiveness, in case
m4 is getting its input from another interactive filter.

	Dan Franklin