static int warn1(void) { char name[NC]; int n, sign; size_t i; tchar c; switch (cbits(c = getch())) { case '-': c = getch(); sign = -1; break; case '+': c = getch(); sign = 1; break; default: sign = 0; break; case 0: return 1; } ch = c; n = atoi0(); if ((i = cbits(ch)) != 0 && i != ' ' && i != '\n') { if (c != ch) { while (getach()); errprint("illegal number, char %c", i); return 1; } for (i = 0; i < sizeof name - 2; i++) { if ((c = getach()) == 0) break; name[i] = c; } name[i] = 0; for (i = 0; warnnames[i].s; i++) if (strcmp(name, warnnames[i].s) == 0) { n = warnnames[i].n; break; } if (warnnames[i].s == NULL) { errprint("unknown warning category %s", name); return 1; } } switch (sign) { case 1: warn |= n; break; case -1: warn &= ~n; break; default: warn = n; } return 0; }
int getrq(void) { int i, j; if ((i = getach()) == 0 || (j = getach()) == 0) goto rtn; i = PAIR(i, j); rtn: return(i); }
void casepsbb(void) { #ifndef NROFF char *buf = NULL; int c; int n = 0, sz = 0; double bb[4] = { 0, 0, 0, 0 }; lgf++; skip(1); do { c = getach(); if (n >= sz) buf = realloc(buf, (sz += 14) * sizeof *buf); buf[n++] = c; } while (c); getpsbb(buf, bb); free(buf); setnrf("llx", bb[0], 0); setnrf("lly", bb[1], 0); setnrf("urx", bb[2], 0); setnrf("ury", bb[3], 0); #endif /* !NROFF */ }
int getsn(void) { int i; if ((i = getach()) == 0) return(0); if (i == '(') return(getrq()); else return(i); }
Tchar n_setch(int c) { int j; char temp[50]; char *s; s = temp; if (c == '(') { /* \(xx */ if ((*s++ = getach()) == 0 || (*s++ = getach()) == 0) return(0); } else { /* \C'...' */ c = getach(); while ((*s = getach()) != c && *s != 0 && s < temp + sizeof(temp) - 1) s++; } *s = '\0'; if ((j = findch(temp)) > 0) return j | chbits; else return 0; }
getname(void) { int j, k; lgf++; for (k = 0; k < NS - 1; k++) { j = getach(); if (!j) break; nextf[k] = j; } nextf[k] = 0; lgf--; return(nextf[0]); }
void caselc_ctype(void) { #ifdef EUC char c, *buf = NULL; int i = 0, sz = 0; skip(1); do { c = getach()&0377; if (i >= sz) buf = realloc(buf, (sz += 8) * sizeof *buf); buf[i++] = c; } while (c && c != ' ' && c != '\n'); buf[i-1] = 0; setlocale(LC_CTYPE, buf); mb_cur_max = MB_CUR_MAX; localize(); #ifndef NROFF ptlocale(buf); #endif free(buf); #endif }
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 {
int copyb(void) { int i, j, state; Tchar ii; int req, k; Offset savoff; Uchar *p; if (skip() || !(j = getrq())) j = '.'; req = j; p = unpair(j); /* was: k = j >> BYTE; j &= BYTEMASK; */ j = p[0]; k = p[1]; copyf++; flushi(); nlflg = 0; state = 1; /* state 0 eat up * state 1 look for . * state 2 look for first char of end macro * state 3 look for second char of end macro */ while (1) { i = cbits(ii = getch()); if (state == 3) { if (i == k) break; if (!k) { ch = ii; i = getach(); ch = ii; if (!i) break; } state = 0; goto c0; } if (i == '\n') { state = 1; nlflg = 0; goto c0; } if (state == 1 && i == '.') { state++; savoff = offset; goto c0; } if (state == 2 && i == j) { state++; goto c0; } state = 0; c0: if (offset) wbf(ii); } if (offset) { offset = savoff; wbf((Tchar)0); } copyf--; return(req); }