box
box(line_win, '-', '-');
| box sub box %prec SUB { bshiftb($1, $2, $3); }
| box sup box %prec SUP { bshiftb($1, $2, $3); }
| int sub box sbox %prec SUB { integral($1, $3, $4); }
| int sub box %prec SUB { integral($1, $3, 0); }
| int sup box %prec SUP { integral($1, 0, $3); }
| box from box tbox %prec FROM { fromto($1, $3, $4); fromflg=0; }
| box to box %prec TO { fromto($1, 0, $3); }
| box diacrit { diacrit($1, $2); }
| fwd box %prec UP { move(FWD, $1, $2); }
| up box %prec UP { move(UP, $1, $2); }
| back box %prec UP { move(BACK, $1, $2); }
| down box %prec UP { move(DOWN, $1, $2); }
eqn : box
| eqn box { eqnbox($1, $2, 0); }
lineupbox: LINEUP box { $$ = $2; lineup(1); }
sbox : sup box %prec SUP { $$ = $2; }
tbox : to box %prec TO { $$ = $2; }
box : box OVER box { boverb($1, $3); }
| MARK box { mark($2); }
| size box %prec SIZE { size($1, $2); }
| font box %prec FONT { font($1, $2); }
| FAT box { fatbox($2); }
| SQRT box { sqrt($2); }
| box sub box sbox %prec SUB { shift2($1, $3, $4); }
static const char **box;
box = get_boxchars();
(void) printf("%s ", HAS_SIBLING(ancestor) ? box[BAR] : " ");
(void) printf("%s%s", HAS_SIBLING(p) ? box[VRIGHT] : box[CORNER],
box[DASH]);
#define no_table(x, box, vf, rf, c) bytes2word(\
box[bval(vf(x, 0, c), rf(0, c))], \
box[bval(vf(x, 1, c), rf(1, c))], \
box[bval(vf(x, 2, c), rf(2, c))], \
box[bval(vf(x, 3, c), rf(3, c))])
#define ls_box(x, c) no_table(x, t_use(s, box), vf1, rf2, c)
d_1(uint8_t, t_dec(s, box), sb_data, h0);
d_1(uint8_t, t_dec(i, box), isb_data, h0);
extern int box(WINDOW *, chtype, chtype);
extern int box(WINDOW *, chtype, chtype);
extern int box(WINDOW *, char, char);