tchar eat(tchar c) { register tchar i; while (i = getch(), !issame(i, c) && (cbits(i) != '\n')) ; if (cbits(c) != ' ' && !issame(i, c)) nodelim(c); return(i); }
void setov(void) { register int j = 0, k; tchar i, delim, o[NOV]; int w[NOV]; if (ismot(i = getch())) return; delim = i; for (k = 0; (k < NOV) && (j = cbits(i = getch()), !issame(i, delim)) && (j != '\n'); k++) { o[k] = i; w[k] = width(i); } if (!issame(j, delim)) nodelim(delim); o[k] = w[k] = 0; if (o[0]) for (j = 1; j; ) { j = 0; for (k = 1; o[k] ; k++) { if (w[k-1] < w[k]) { j++; i = w[k]; w[k] = w[k-1]; w[k-1] = i; i = o[k]; o[k] = o[k-1]; o[k-1] = i; } } } else return; pbbuf[pbp++] = makem(w[0] / 2); for (k = 0; o[k]; k++) ; while (k>0) { k--; if (pbp >= pbsize-4) if (growpbbuf() == NULL) { errprint("no space for .ov"); done(2); } pbbuf[pbp++] = makem(-((w[k] + w[k+1]) / 2)); pbbuf[pbp++] = o[k]; } }
static int getpenalty(int *valp) { tchar c, delim; if (ismot(delim = getch())) return 0; if (readpenalty(valp) == 0) return 0; c = getch(); if (!issame(c, delim)) { nodelim(delim); return 0; } return 1; }
void setbra(void) { register int k; tchar i, *j, dwn, delim; int cnt; tchar brabuf[NC]; if (ismot(i = getch())) return; delim = i; j = brabuf + 1; cnt = 0; #ifdef NROFF dwn = sabsmot(2 * t.Halfline) | MOT | VMOT; #endif #ifndef NROFF dwn = sabsmot((int)EM) | MOT | VMOT; #endif while ((k = cbits(i = getch()), !issame(delim, i)) && (k != '\n') && (j <= (brabuf + NC - 4))) { *j++ = i | ZBIT; *j++ = dwn; cnt++; } if (!issame(i, delim)) nodelim(delim); if (--cnt < 0) return; else if (!cnt) { ch = *(j - 2); return; } *j = 0; #ifdef NROFF *--j = *brabuf = sabsmot(cnt * t.Halfline) | MOT | NMOT | VMOT; #endif #ifndef NROFF *--j = *brabuf = sabsmot((cnt * (int)EM) / 2) | MOT | NMOT | VMOT; #endif *--j &= ~ZBIT; pushback(brabuf); }
int cmpstr(tchar c) { register int j, delim; register tchar i; register int val; int savapts, savapts1, savfont, savfont1, savpts, savpts1; tchar string[1280]; register tchar *sp; if (ismot(c)) return(0); delim = cbits(c); savapts = apts; savapts1 = apts1; savfont = font; savfont1 = font1; savpts = pts; savpts1 = pts1; sp = string; while ((j = cbits(i = getch()))!=delim && j!='\n' && sp<&string[1280-1]) *sp++ = i; if (j != delim) nodelim(delim); if (sp >= string + 1280) { errprint("too-long string compare."); edone(0100); } if (nlflg) { val = sp==string; goto rtn; } *sp++ = 0; apts = savapts; apts1 = savapts1; font = savfont; font1 = savfont1; pts = savpts; pts1 = savpts1; mchbits(); val = 1; sp = string; while ((j = cbits(i = getch())) != delim && j != '\n') { if (*sp != i) { eat(delim); val = 0; goto rtn; } sp++; } if (j != delim) nodelim(delim); if (*sp) val = 0; rtn: apts = savapts; apts1 = savapts1; font = savfont; font1 = savfont1; pts = savpts; pts1 = savpts1; mchbits(); return(val); }
void setvline(void) { register int i; tchar c, _d, delim, rem, ver, neg; int cnt, v; tchar vlbuf[NC]; register tchar *vlp; if (ismot(c = getch())) return; delim = c; dfact = lss; vflag++; i = quant(hatoi(), VERT); dfact = 1; if (!i) { eat(delim); vflag = 0; return; } if (c = getch(), issame(c, delim)) { c = BOXRULE | chbits; /*default box rule*/ } else { _d = getch(); if (!issame(_d, delim)) nodelim(delim); } c |= ZBIT; neg = 0; if (i < 0) { i = -i; neg = NMOT; } #ifdef NROFF v = 2 * t.Halfline; #endif #ifndef NROFF v = EM; #endif cnt = i / v; rem = makem(i % v) | neg; ver = makem(v) | neg; vlp = vlbuf; if (!neg) *vlp++ = ver; if (absmot(rem) != 0) { *vlp++ = c; *vlp++ = rem; } while ((vlp < (vlbuf + NC - 3)) && cnt--) { *vlp++ = c; *vlp++ = ver; } *(vlp - 2) &= ~ZBIT; if (!neg) vlp--; *vlp++ = 0; pushback(vlbuf); vflag = 0; }