code: plan9front

ref: 8906ad7c15744271d0f6a41ae2f590a8bc31bf21
dir: /sys/src/cmd/tbl/t1.c/

View raw version
/* t1.c: main control and input switching */
#
# include "t.h"

# define MACROS "/sys/lib/tmac/tmac.s"
# define PYMACS "/sys/lib/tmac/tmac.m"


# define ever (;;)

void
main(int argc, char *argv[])
{
	exits(tbl(argc, argv)? "error" : 0);
}


int
tbl(int argc, char *argv[])
{
	char	line[5120];
	/*int x;*/
	/*x=malloc((char *)0);	uncomment when allocation breaks*/
	Binit(&tabout, 1, OWRITE);
	setinp(argc, argv);
	while (gets1(line, sizeof(line))) {
		Bprint(&tabout, "%s\n", line);
		if (prefix(".TS", line))
			tableput();
	}
	Bterm(tabin);
	return(0);
}


int	sargc;
char	**sargv;

void
setinp(int argc, char **argv)
{
	sargc = argc;
	sargv = argv;
	sargc--; 
	sargv++;
	if (sargc == 0 || swapin() == 0) {
		tabin = (Biobuf*)getcore(sizeof(Biobuf), 1);
		Binit(tabin, 0, OREAD);
	}
}


int
swapin(void)
{
	char	*name;
	while (sargc > 0 && **sargv == '-') {
		if (match("-ms", *sargv)) {
			*sargv = MACROS;
			break;
		}
		if (match("-mm", *sargv)) {
			*sargv = PYMACS;
			break;
		}
		if (match("-TX", *sargv))
			pr1403 = 1;
		if (match("-", *sargv))
			break;
		sargc--; 
		sargv++;
	}
	if (sargc <= 0) 
		return(0);
	/* file closing is done by GCOS troff preprocessor */
	if(tabin)
		Bterm(tabin);
	ifile = *sargv;
	name = ifile;
	if (match(ifile, "-")) {
		tabin = (Biobuf*)getcore(sizeof(Biobuf), 1);
		Binit(tabin, 0, OREAD);
	} else
		tabin = Bopen(ifile, OREAD);
	iline = 1;
	Bprint(&tabout, ".ds f. %s\n", ifile);
	Bprint(&tabout, ".lf %d %s\n", iline, name);
	if (tabin == 0)
		error("Can't open file");
	sargc--;
	sargv++;
	return(1);
}