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