#define MAXLINE 1200 /* maximum input line */
char in
[MAXLINE
]; /* input buffer */
main(argc
,argv
) int argc
; char *argv
[];{
eqnexit(eqn(argc
, argv
));
fprintf(stderr
, "run terminated due to eqn error\n");
eqn(argc
,argv
) int argc
; char *argv
[];{
init_tbl(); /* install keywords in tables */
while ((type
=getline(in
)) != EOF
) {
if (in
[0]=='.' && in
[1]=='E' && in
[2]=='Q') {
for (i
=11; i
<100; used
[i
++]=0);
printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n");
printf(".nr %d \\w'\\*(%d'\n", eqnreg
, eqnreg
);
/* printf(".if \\n(%d>\\n(.l .tm too-long eqn, file %s, between lines %d-%d\n", */
/* eqnreg, svargv[ifile], eqline, linect); */
printf(".nr MK %d\n", markline
); /* for -ms macros */
printf(".if %d>\\n(.v .ne %du\n", eqnht
, eqnht
);
printf(".rn %d 10\n", eqnreg
);
if(!noeqn
)printf("\\*(10\n");
printf(".ps \\n(99\n.ft \\n(98\n");
if (putchar(lastchar
) != '\n')
while (putchar(gtc()) != '\n');
getline(s
) register char *s
; {
while((*s
++=c
=gtc())!='\n' && c
!=EOF
&& c
!=lefteq
)
error( !FATAL
, "input line too long: %.20s\n", in
);
printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n");
printf(".as %d \"%s\n", ds
, in
);
printf(".as %d \\*(%d\n", ds
, eqnreg
);
printf(".ps \\n(99\n.ft \\n(98\n");
} while (getline(in
) == lefteq
);
printf(".as %d \"%s", ds
, in
);
printf(".ps \\n(99\n.ft \\n(98\n");
if(dbg
)printf(".\tanswer <- S%d, h=%d,b=%d\n",p1
, eht
[p1
], ebase
[p1
]);
printf(".ds %d \\x'0'", p1
);
/* suppposed to leave room for a subscript or superscript */
before
= eht
[p1
] - ebase
[p1
] - VERT(3); /* 3 = 1.5 lines */
printf("\\x'0-%du'", before
);
printf("\\f%c\\s%d\\*(%d%s\\s\\n(99\\f\\n(98",
gfont
, gsize
, p1
, rfont
[p1
] == ITAL
? "\\|" : "");
after
= ebase
[p1
] - VERT(1);
printf("\\x'%du'", after
);
if (used
[i
]++ == 0) return(i
);
error( FATAL
, "no eqn strings left", i
);
printf(".ps %d\n", EFFPS(p
));
nrwid(n1
, p
, n2
) int n1
, p
, n2
; {
printf(".nr %d \\w'\\s%d\\*(%d'\n", n1
, EFFPS(p
), n2
);
setfile(argc
, argv
) int argc
; char *argv
[]; {
static char *nullstr
= "-";
while (svargc
> 0 && svargv
[1][0] == '-') {
case 'd': lefteq
=svargv
[1][2]; righteq
=svargv
[1][3]; break;
case 's': gsize
= atoi(&svargv
[1][2]); break;
case 'p': deltaps
= atoi(&svargv
[1][2]); break;
case 'f': gfont
= svargv
[1][2]; break;
case 'e': noeqn
++; break;
else if ((curfile
= fopen(svargv
[1], "r")) == NULL
)
error( FATAL
,"can't open file %s", svargv
[1]);
error(fatal
, s1
, s2
) int fatal
; char *s1
, *s2
; {
printf("eqn fatal error: ");
printf("\nfile %s, between lines %d and %d\n",
svargv
[ifile
], eqline
, linect
);
fprintf(stderr
, "eqn: ");
fprintf(stderr
, "fatal error: ");
fprintf(stderr
, "\nfile %s, between lines %d and %d\n",
svargv
[ifile
], eqline
, linect
);