xref: /plan9/sys/src/cmd/tbl/t1.c (revision 8f856f2463702e5e734d8cc39764133b3427cbab)
1 /* t1.c: main control and input switching */
2 #
3 # include "t.h"
4 
5 # define MACROS "/sys/lib/tmac/tmac.s"
6 # define PYMACS "/sys/lib/tmac/tmac.m"
7 
8 
9 # define ever (;;)
10 
11 void
main(int argc,char * argv[])12 main(int argc, char *argv[])
13 {
14 	exits(tbl(argc, argv)? "error" : 0);
15 }
16 
17 
18 int
tbl(int argc,char * argv[])19 tbl(int argc, char *argv[])
20 {
21 	char	line[5120];
22 	/*int x;*/
23 	/*x=malloc((char *)0);	uncomment when allocation breaks*/
24 	Binit(&tabout, 1, OWRITE);
25 	setinp(argc, argv);
26 	while (gets1(line, sizeof(line))) {
27 		Bprint(&tabout, "%s\n", line);
28 		if (prefix(".TS", line))
29 			tableput();
30 	}
31 	Bterm(tabin);
32 	return(0);
33 }
34 
35 
36 int	sargc;
37 char	**sargv;
38 
39 void
setinp(int argc,char ** argv)40 setinp(int argc, char **argv)
41 {
42 	sargc = argc;
43 	sargv = argv;
44 	sargc--;
45 	sargv++;
46 	if (sargc == 0 || swapin() == 0) {
47 		tabin = (Biobuf*)getcore(sizeof(Biobuf), 1);
48 		Binit(tabin, 0, OREAD);
49 	}
50 }
51 
52 
53 int
swapin(void)54 swapin(void)
55 {
56 	char	*name;
57 	while (sargc > 0 && **sargv == '-') {
58 		if (match("-ms", *sargv)) {
59 			*sargv = MACROS;
60 			break;
61 		}
62 		if (match("-mm", *sargv)) {
63 			*sargv = PYMACS;
64 			break;
65 		}
66 		if (match("-TX", *sargv))
67 			pr1403 = 1;
68 		if (match("-", *sargv))
69 			break;
70 		sargc--;
71 		sargv++;
72 	}
73 	if (sargc <= 0)
74 		return(0);
75 	/* file closing is done by GCOS troff preprocessor */
76 	if(tabin)
77 		Bterm(tabin);
78 	ifile = *sargv;
79 	name = ifile;
80 	if (match(ifile, "-")) {
81 		tabin = (Biobuf*)getcore(sizeof(Biobuf), 1);
82 		Binit(tabin, 0, OREAD);
83 	} else
84 		tabin = Bopen(ifile, OREAD);
85 	iline = 1;
86 	Bprint(&tabout, ".ds f. %s\n", ifile);
87 	Bprint(&tabout, ".lf %d %s\n", iline, name);
88 	if (tabin == 0)
89 		error("Can't open file");
90 	sargc--;
91 	sargv++;
92 	return(1);
93 }
94