|
|
1.1 ! root 1: #include "tdef.h" ! 2: #include "tw.h" ! 3: #include "ext.h" ! 4: #include <ctype.h> ! 5: ! 6: /* ! 7: * n6.c -- width functions, sizes and fonts ! 8: */ ! 9: ! 10: int bdtab[NFONT+1] ={ 0, 0, 0, 3, 3, 0, }; ! 11: int sbold = 0; ! 12: int fontlab[NFONT+1] = { 0, 'R', 'I', 'B', PAIR('B','I'), 'S', 0 }; ! 13: ! 14: extern int nchtab; ! 15: ! 16: width(j) ! 17: register tchar j; ! 18: { ! 19: register i, k; ! 20: ! 21: if (j & (ZBIT|MOT)) { ! 22: if (iszbit(j)) ! 23: return(0); ! 24: if (isvmot(j)) ! 25: return(0); ! 26: k = absmot(j); ! 27: if (isnmot(j)) ! 28: k = -k; ! 29: return(k); ! 30: } ! 31: i = cbits(j); ! 32: if (i < ' ') { ! 33: if (i == '\b') ! 34: return(-widthp); ! 35: if (i == PRESC) ! 36: i = eschar; ! 37: else if (iscontrol(i)) ! 38: return(0); ! 39: } ! 40: if (i==ohc) ! 41: return(0); ! 42: i = trtab[i]; ! 43: if (i < 32) ! 44: return(0); ! 45: k = t.width[i] * t.Char; ! 46: widthp = k; ! 47: return(k); ! 48: } ! 49: ! 50: ! 51: tchar setch(c) ! 52: { ! 53: register j; ! 54: char temp[50]; ! 55: register char *s; ! 56: ! 57: s = temp; ! 58: if (c == '(') { /* \(xx */ ! 59: if ((*s++ = getach()) == 0 || (*s++ = getach()) == 0) ! 60: return(0); ! 61: } else { /* \C'...' */ ! 62: c = getach(); ! 63: while ((*s = getach()) != c && *s != 0 && s < temp + sizeof(temp) - 1) ! 64: s++; ! 65: } ! 66: *s = '\0'; ! 67: if ((j = findch(temp)) > 0) ! 68: return j | chbits; ! 69: else ! 70: return 0; ! 71: } ! 72: ! 73: tchar setabs() /* set absolute char from \C'...' */ ! 74: { /* for now, a no-op */ ! 75: int i, n, nf; ! 76: ! 77: getch(); ! 78: n = 0; ! 79: n = inumb(&n); ! 80: getch(); ! 81: if (nonumb) ! 82: return 0; ! 83: if (n >= nchtab + 128) { ! 84: errprint("\\N'%d' toooo large", n); ! 85: return 0; ! 86: } ! 87: return n + nchtab + 128; ! 88: } ! 89: ! 90: findft(i) ! 91: register int i; ! 92: { ! 93: register k; ! 94: ! 95: if ((k = i - '0') >= 0 && k <= nfonts && k < smnt) ! 96: return(k); ! 97: for (k = 0; fontlab[k] != i; k++) ! 98: if (k > nfonts) ! 99: return(-1); ! 100: return(k); ! 101: } ! 102: ! 103: ! 104: caseps() ! 105: { ! 106: } ! 107: ! 108: ! 109: mchbits() ! 110: { ! 111: chbits = 0; ! 112: setfbits(chbits, font); ! 113: sps = width(' ' | chbits); ! 114: } ! 115: ! 116: ! 117: setps() ! 118: { ! 119: register i, j; ! 120: ! 121: i = cbits(getch()); ! 122: if (isdigit(i)) { /* \sd or \sdd */ ! 123: i -= '0'; ! 124: if (i == 0) /* \s0 */ ! 125: ; ! 126: else if (i <= 3 && isdigit(j = cbits(ch=getch()))) { /* \sdd */ ! 127: ch = 0; ! 128: } ! 129: } else if (i == '(') { /* \s(dd */ ! 130: getch(); ! 131: getch(); ! 132: } else if (i == '+' || i == '-') { /* \s+, \s- */ ! 133: j = cbits(getch()); ! 134: if (isdigit(j)) { /* \s+d, \s-d */ ! 135: ; ! 136: } else if (j == '(') { /* \s+(dd, \s-(dd */ ! 137: getch(); ! 138: getch(); ! 139: } ! 140: } ! 141: } ! 142: ! 143: ! 144: tchar setht() /* set character height from \H'...' */ ! 145: { ! 146: int n; ! 147: tchar c; ! 148: ! 149: getch(); ! 150: n = inumb(&apts); ! 151: getch(); ! 152: return(0); ! 153: } ! 154: ! 155: ! 156: tchar setslant() /* set slant from \S'...' */ ! 157: { ! 158: int n; ! 159: tchar c; ! 160: ! 161: getch(); ! 162: n = 0; ! 163: n = inumb(&n); ! 164: getch(); ! 165: return(0); ! 166: } ! 167: ! 168: ! 169: caseft() ! 170: { ! 171: skip(); ! 172: setfont(1); ! 173: } ! 174: ! 175: ! 176: setfont(a) ! 177: int a; ! 178: { ! 179: register i, j; ! 180: ! 181: if (a) ! 182: i = getrq(); ! 183: else ! 184: i = getsn(); ! 185: if (!i || i == 'P') { ! 186: j = font1; ! 187: goto s0; ! 188: } ! 189: if (i == 'S' || i == '0') ! 190: return; ! 191: if ((j = findft(i, fontlab)) == -1) ! 192: return; ! 193: s0: ! 194: font1 = font; ! 195: font = j; ! 196: mchbits(); ! 197: } ! 198: ! 199: ! 200: setwd() ! 201: { ! 202: register base, wid; ! 203: register tchar i; ! 204: int delim, emsz, k; ! 205: int savhp, savapts, savapts1, savfont, savfont1, savpts, savpts1; ! 206: ! 207: base = numtab[ST].val = numtab[ST].val = wid = numtab[CT].val = 0; ! 208: if (ismot(i = getch())) ! 209: return; ! 210: delim = cbits(i); ! 211: savhp = numtab[HP].val; ! 212: numtab[HP].val = 0; ! 213: savapts = apts; ! 214: savapts1 = apts1; ! 215: savfont = font; ! 216: savfont1 = font1; ! 217: savpts = pts; ! 218: savpts1 = pts1; ! 219: setwdf++; ! 220: while (cbits(i = getch()) != delim && !nlflg) { ! 221: k = width(i); ! 222: wid += k; ! 223: numtab[HP].val += k; ! 224: if (!ismot(i)) { ! 225: emsz = (INCH * pts + 36) / 72; ! 226: } else if (isvmot(i)) { ! 227: k = absmot(i); ! 228: if (isnmot(i)) ! 229: k = -k; ! 230: base -= k; ! 231: emsz = 0; ! 232: } else ! 233: continue; ! 234: if (base < numtab[SB].val) ! 235: numtab[SB].val = base; ! 236: if ((k = base + emsz) > numtab[ST].val) ! 237: numtab[ST].val = k; ! 238: } ! 239: setn1(wid, 0, (tchar) 0); ! 240: numtab[HP].val = savhp; ! 241: apts = savapts; ! 242: apts1 = savapts1; ! 243: font = savfont; ! 244: font1 = savfont1; ! 245: pts = savpts; ! 246: pts1 = savpts1; ! 247: mchbits(); ! 248: setwdf = 0; ! 249: } ! 250: ! 251: ! 252: tchar vmot() ! 253: { ! 254: dfact = lss; ! 255: vflag++; ! 256: return(mot()); ! 257: } ! 258: ! 259: ! 260: tchar hmot() ! 261: { ! 262: dfact = EM; ! 263: return(mot()); ! 264: } ! 265: ! 266: ! 267: tchar mot() ! 268: { ! 269: register int j, n; ! 270: register tchar i; ! 271: ! 272: j = HOR; ! 273: getch(); /*eat delim*/ ! 274: if (n = atoi()) { ! 275: if (vflag) ! 276: j = VERT; ! 277: i = makem(quant(n, j)); ! 278: } else ! 279: i = 0; ! 280: getch(); ! 281: vflag = 0; ! 282: dfact = 1; ! 283: return(i); ! 284: } ! 285: ! 286: ! 287: tchar sethl(k) ! 288: int k; ! 289: { ! 290: register j; ! 291: tchar i; ! 292: ! 293: j = t.Halfline; ! 294: if (k == 'u') ! 295: j = -j; ! 296: else if (k == 'r') ! 297: j = -2 * j; ! 298: vflag++; ! 299: i = makem(j); ! 300: vflag = 0; ! 301: return(i); ! 302: } ! 303: ! 304: ! 305: tchar makem(i) ! 306: int i; ! 307: { ! 308: register tchar j; ! 309: ! 310: if ((j = i) < 0) ! 311: j = -j; ! 312: j |= MOT; ! 313: if (i < 0) ! 314: j |= NMOT; ! 315: if (vflag) ! 316: j |= VMOT; ! 317: return(j); ! 318: } ! 319: ! 320: ! 321: tchar getlg(i) ! 322: tchar i; ! 323: { ! 324: return(i); ! 325: } ! 326: ! 327: ! 328: caselg() ! 329: { ! 330: } ! 331: ! 332: ! 333: casefp() ! 334: { ! 335: register i, j; ! 336: ! 337: skip(); ! 338: if ((i = cbits(getch()) - '0') < 0 || i > nfonts) ! 339: return; ! 340: if (skip() || !(j = getrq())) ! 341: return; ! 342: fontlab[i] = j; ! 343: } ! 344: ! 345: ! 346: casecs() ! 347: { ! 348: } ! 349: ! 350: ! 351: casebd() ! 352: { ! 353: register i, j, k; ! 354: ! 355: k = 0; ! 356: bd0: ! 357: if (skip() || !(i = getrq()) || (j = findft(i)) == -1) { ! 358: if (k) ! 359: goto bd1; ! 360: else ! 361: return; ! 362: } ! 363: if (j == smnt) { ! 364: k = smnt; ! 365: goto bd0; ! 366: } ! 367: if (k) { ! 368: sbold = j; ! 369: j = k; ! 370: } ! 371: bd1: ! 372: skip(); ! 373: noscale++; ! 374: bdtab[j] = atoi(); ! 375: noscale = 0; ! 376: } ! 377: ! 378: ! 379: casevs() ! 380: { ! 381: register i; ! 382: ! 383: skip(); ! 384: vflag++; ! 385: dfact = INCH; /*default scaling is points!*/ ! 386: dfactd = 72; ! 387: res = VERT; ! 388: i = inumb(&lss); ! 389: if (nonumb) ! 390: i = lss1; ! 391: if (i < VERT) ! 392: i = VERT; /* was VERT */ ! 393: lss1 = lss; ! 394: lss = i; ! 395: } ! 396: ! 397: ! 398: ! 399: ! 400: casess() ! 401: { ! 402: } ! 403: ! 404: ! 405: tchar xlss() ! 406: { ! 407: /* stores \x'...' into ! 408: /* two successive tchars. ! 409: /* the first contains HX, the second the value, ! 410: /* encoded as a vertical motion. ! 411: /* decoding is done in n2.c by pchar(). ! 412: */ ! 413: int i; ! 414: ! 415: getch(); ! 416: dfact = lss; ! 417: i = quant(atoi(), VERT); ! 418: dfact = 1; ! 419: getch(); ! 420: if (i >= 0) ! 421: *pbp++ = MOT | VMOT | i; ! 422: else ! 423: *pbp++ = MOT | VMOT | NMOT | -i; ! 424: return(HX); ! 425: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.