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