void casesp(int a) { register int i, j, savlss; tbreak(); if (dip->nls || trap) return; i = findt1(); if (!a) { skip(0); j = vnumb((int *)0); if (nonumb) j = lss; } else j = a; if (j == 0) return; if (i < j) j = i; savlss = lss; if (dip != d) i = dip->dnl; else i = numtab[NL].val; if ((i + j) < 0) j = -i; lss = j; newline(0); lss = savlss; }
void caseos(void) { register int savlss; if (sv <= findt1()) { savlss = lss; lss = sv; newline(0); lss = savlss; sv = 0; } }
void casene(void) { register int i, j; skip(0); i = vnumb((int *)0); if (nonumb) i = lss; if (i > (j = findt1())) { i = lss; lss = j; dip->nls = 0; newline(0); lss = i; } }
void setn(void) { int i, j, f; Tchar ii; Uchar *p; char buf[NTM]; /* for \n(.S */ f = nform = 0; if ((i = cbits(ii = getach())) == '+') f = 1; else if (i == '-') f = -1; else if (ii) /* don't put it back if it's already back (thanks to jaap) */ ch = ii; if (falsef) f = 0; if ((i = getsn()) == 0) return; p = unpair(i); if (p[0] == '.') switch (p[1]) { case 's': i = pts; break; case 'v': i = lss; break; case 'f': i = font; break; case 'p': i = pl; break; case 't': i = findt1(); break; case 'o': i = po; break; case 'l': i = ll; break; case 'i': i = in; break; case '$': i = frame->nargs; break; case 'A': i = ascii; break; case 'c': i = numtabp[CD].val; break; case 'n': i = lastl; break; case 'a': i = ralss; break; case 'h': i = dip->hnl; break; case 'd': if (dip != d) i = dip->dnl; else i = numtabp[NL].val; break; case 'u': i = fi; break; case 'j': i = ad + 2 * admod; break; case 'w': i = widthp; break; case 'x': i = nel; break; case 'y': i = un; break; case 'T': i = dotT; break; /* -Tterm used in nroff */ case 'V': i = VERT; break; case 'H': i = HOR; break; case 'k': i = ne; break; case 'P': i = print; break; case 'L': i = ls; break; case 'R': /* maximal # of regs that can be addressed */ i = 255*256 - regcnt; break; case 'z': p = unpair(dip->curd); *pbp++ = p[1]; /* watch order */ *pbp++ = p[0]; return; case 'b': i = bdtab[font]; break; case 'F': cpushback(cfname[ifi]); return; case 'S': buf[0] = j = 0; for( i = 0; tabtab[i] != 0 && i < NTAB; i++) { if (i > 0) buf[j++] = ' '; sprintf(&buf[j], "%d", tabtab[i] & TABMASK); j = strlen(buf); if ( tabtab[i] & RTAB) sprintf(&buf[j], "uR"); else if (tabtab[i] & CTAB) sprintf(&buf[j], "uC"); else sprintf(&buf[j], "uL"); j += 2; } cpushback(buf); return; default: goto s0; } else { s0: if ((j = findr(i)) == -1) i = 0; else { i = numtabp[j].val = numtabp[j].val + numtabp[j].inc * f; nform = numtabp[j].fmt; } } setn1(i, nform, (Tchar) 0); }
setn() { register i, j; register tchar ii; int f; f = nform = 0; if ((i = cbits(ii = getach())) == '+') f = 1; else if (i == '-') f = -1; else ch = ii; if (falsef) f = 0; if ((i = getsn()) == 0) return; if ((i & 0177) == '.') switch (i >> BYTE) { case 's': i = pts; break; case 'v': i = lss; break; case 'f': i = font; break; case 'p': i = pl; break; case 't': i = findt1(); break; case 'o': i = po; break; case 'l': i = ll; break; case 'i': i = in; break; case '$': i = frame->nargs; break; case 'A': i = ascii; break; case 'c': i = numtab[CD].val; break; case 'n': i = lastl; break; case 'a': i = ralss; break; case 'h': i = dip->hnl; break; case 'd': if (dip != d) i = dip->dnl; else i = numtab[NL].val; break; case 'u': i = fi; break; case 'j': i = ad + 2 * admod; break; case 'w': i = widthp; break; case 'x': i = nel; break; case 'y': i = un; break; case 'T': i = dotT; break; /*-Tterm used in nroff*/ case 'V': i = VERT; break; case 'H': i = HOR; break; case 'k': i = ne; break; case 'P': i = print; break; case 'L': i = ls; break; case 'R': i = NN - regcnt; break; case 'z': i = dip->curd; *pbp++ = (i >> BYTE) & BYTEMASK; *pbp++ = i & BYTEMASK; return; case 'b': i = bdtab[font]; break; case 'F': cpushback(cfname[ifi]); return; default: goto s0; } else {
movword(void) { int w; Tchar i, *wp; int savwch, hys; over = 0; wp = wordp; if (!nwd) { while (cbits(*wp++) == ' ') { wch--; wne -= sps; } wp--; } if (wne > nel && !hyoff && hyf && (!nwd || nel > 3 * sps) && (!(hyf & 02) || (findt1() > lss))) hyphen(wp); savwch = wch; hyp = hyptr; nhyp = 0; while (*hyp && *hyp <= wp) hyp++; while (wch) { if (hyoff != 1 && *hyp == wp) { hyp++; if (!wdstart || (wp > wdstart + 1 && wp < wdend && (!(hyf & 04) || wp < wdend - 1) && /* 04 => last 2 */ (!(hyf & 010) || wp > wdstart + 2))) { /* 010 => 1st 2 */ nhyp++; storeline((Tchar)IMP, 0); } } i = *wp++; w = width(i); wne -= w; wch--; storeline(i, w); } if (nel >= 0) { nwd++; return(0); /* line didn't fill up */ } if (TROFF) xbits((Tchar)HYPHEN, 1); hys = width((Tchar)HYPHEN); m1: if (!nhyp) { if (!nwd) goto m3; if (wch == savwch) goto m4; } if (*--linep != IMP) goto m5; if (!(--nhyp)) if (!nwd) goto m2; if (nel < hys) { nc--; goto m1; } m2: if ((i = cbits(*(linep - 1))) != '-' && i != EMDASH) { *linep = (*(linep - 1) & SFMASK) | HYPHEN; w = width(*linep); nel -= w; ne += w; linep++; } m3: nwd++; m4: wordp = wp; return(1); /* line filled up */ m5: nc--; w = width(*linep); ne -= w; nel += w; wne += w; wch++; wp--; goto m1; }