|
|
1.1 ! root 1: #include "tdef.h" ! 2: extern ! 3: #include "d.h" ! 4: extern ! 5: #include "v.h" ! 6: #ifdef NROFF ! 7: extern ! 8: #include "tw.h" ! 9: #endif ! 10: ! 11: /* ! 12: troff6.c ! 13: ! 14: width functions, sizes and fonts ! 15: */ ! 16: ! 17: extern int inchar[LNSIZE], *pinchar; /* XXX */ ! 18: extern int eschar; ! 19: extern int widthp; ! 20: extern int ohc; ! 21: extern int xfont; ! 22: extern int smnt; ! 23: extern int setwdf; ! 24: extern char trtab[]; ! 25: extern int chbits; ! 26: extern int nonumb; ! 27: extern int noscale; ! 28: extern int font; ! 29: extern int font1; ! 30: extern int pts; ! 31: extern int sps; ! 32: extern int nlflg; ! 33: extern int nform; ! 34: extern int dfact; ! 35: extern int dfactd; ! 36: extern int lss; ! 37: extern int lss1; ! 38: extern int vflag; ! 39: extern int ch0; ! 40: extern int level; ! 41: extern int ch; ! 42: extern int res; ! 43: extern int xxx; ! 44: int fontlab[] = {'R','I','B','S',0}; ! 45: ! 46: width(c) ! 47: int c; ! 48: { ! 49: register i,j,k; ! 50: ! 51: j = c; ! 52: k = 0; ! 53: if(j & MOT){ ! 54: if(j & VMOT)goto rtn; ! 55: k = j & ~MOTV; ! 56: if(j & NMOT)k = -k; ! 57: goto rtn; ! 58: } ! 59: if((i = (j & CMASK)) == 010){ ! 60: k = -widthp; ! 61: goto rtn; ! 62: } ! 63: if(i == PRESC)i = eschar; ! 64: if((i == ohc) || ! 65: (i >= 0370))goto rtn; ! 66: if(j & ZBIT)goto rtn; ! 67: i = trtab[i] & BMASK; ! 68: if(i < 040)goto rtn; ! 69: k = (*(t.codetab[i-32]) & 0177) * t.Char; ! 70: widthp = k; ! 71: rtn: ! 72: return(k); ! 73: } ! 74: setch(){ ! 75: register i,*j,k; ! 76: extern int chtab[]; ! 77: ! 78: if((i = getrq()) == 0)return(0); ! 79: for(j=chtab;*j != i;j++)if(*(j++) == 0)return(0); ! 80: k = *(++j) | chbits; ! 81: return(k); ! 82: } ! 83: find(i,j) ! 84: int i,j[]; ! 85: { ! 86: register k; ! 87: ! 88: if(((k = i-'0') >= 1) && (k <= 4) && (k != smnt))return(--k); ! 89: for(k=0; j[k] != i; k++)if(j[k] == 0)return(-1); ! 90: return(k); ! 91: } ! 92: mchbits(){ ! 93: chbits = (((pts)<<2) | font) << (BYTE + 1); ! 94: sps = width(' ' | chbits); ! 95: } ! 96: setps(){ ! 97: register i,j; ! 98: ! 99: if((((i=getch() & CMASK) == '+') || (i == '-')) && ! 100: (((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9))){ ! 101: ch = 0; ! 102: return; ! 103: } ! 104: if((i -= '0') == 0){ ! 105: return; ! 106: } ! 107: if((i > 0) && (i <= 9)){ ! 108: if((i <= 3) && ! 109: ((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9)){ ! 110: i = 10*i +j; ! 111: ch = 0; ! 112: } ! 113: } ! 114: } ! 115: caseft(){ ! 116: skip(); ! 117: setfont(1); ! 118: } ! 119: setfont(a) ! 120: int a; ! 121: { ! 122: register i,j; ! 123: ! 124: if(a)i = getrq(); ! 125: else i = getsn(); ! 126: if(!i || (i == 'P')){ ! 127: j = font1; ! 128: goto s0; ! 129: } ! 130: if(i == 'S')return; ! 131: if((j = find(i,fontlab)) == -1)return; ! 132: s0: ! 133: font1 = font; ! 134: font = j; ! 135: mchbits(); ! 136: } ! 137: setwd(){ ! 138: register i, base, wid; ! 139: int delim, em, k; ! 140: int savlevel, savhp, savfont, savfont1; ! 141: int *savpinchar, *p, *q, tempinchar[LNSIZE]; /* XXX */ ! 142: ! 143: base = v.st = v.sb = wid = v.ct = 0; ! 144: if((delim = getch() & CMASK) & MOT)return; ! 145: savhp = v.hp; ! 146: savpinchar = pinchar; /* XXX */ ! 147: for (p=inchar, q=tempinchar; p < pinchar; ) /* XXX */ ! 148: *q++ = *p++; /* XXX */ ! 149: pinchar = inchar; /* XXX */ ! 150: savlevel = level; ! 151: v.hp = level = 0; ! 152: savfont = font; ! 153: savfont1 = font1; ! 154: setwdf++; ! 155: while((((i = getch()) & CMASK) != delim) && !nlflg){ ! 156: wid += width(i); ! 157: if(!(i & MOT)){ ! 158: em = 2*t.Halfline; ! 159: }else if(i & VMOT){ ! 160: k = i & ~MOTV; ! 161: if(i & NMOT)k = -k; ! 162: base -= k; ! 163: em = 0; ! 164: }else continue; ! 165: if(base < v.sb)v.sb = base; ! 166: if((k=base + em) > v.st)v.st = k; ! 167: } ! 168: nform = 0; ! 169: setn1(wid); ! 170: v.hp = savhp; ! 171: pinchar = savpinchar; /* XXX */ ! 172: for (p=inchar, q=tempinchar; p < pinchar; ) /* XXX */ ! 173: *p++ = *q++; /* XXX */ ! 174: level = savlevel; ! 175: font = savfont; ! 176: font1 = savfont1; ! 177: mchbits(); ! 178: setwdf = 0; ! 179: } ! 180: vmot(){ ! 181: dfact = lss; ! 182: vflag++; ! 183: return(mot()); ! 184: } ! 185: hmot(){ ! 186: dfact = EM; ! 187: return(mot()); ! 188: } ! 189: mot(){ ! 190: register i, j; ! 191: ! 192: j = HOR; ! 193: getch(); /*eat delim*/ ! 194: if(i = atoi()){ ! 195: if(vflag)j = VERT; ! 196: i = makem(quant(i,j)); ! 197: } ! 198: getch(); ! 199: vflag = 0; ! 200: dfact = 1; ! 201: return(i); ! 202: } ! 203: sethl(k) ! 204: int k; ! 205: { ! 206: register i; ! 207: ! 208: i = t.Halfline; ! 209: if(k == 'u')i = -i; ! 210: else if(k == 'r')i = -2*i; ! 211: vflag++; ! 212: i = makem(i); ! 213: vflag = 0; ! 214: return(i); ! 215: } ! 216: makem(i) ! 217: int i; ! 218: { ! 219: register j; ! 220: ! 221: if((j = i) < 0)j = -j; ! 222: j = (j & ~MOTV) | MOT; ! 223: if(i < 0)j |= NMOT; ! 224: if(vflag)j |= VMOT; ! 225: return(j); ! 226: } ! 227: casefp(){ ! 228: register i, j; ! 229: ! 230: skip(); ! 231: if(((i = (getch() & CMASK) - '0' -1) < 0) || (i >3))return; ! 232: if(skip() || !(j = getrq()))return; ! 233: fontlab[i] = j; ! 234: } ! 235: casevs(){ ! 236: register i; ! 237: ! 238: skip(); ! 239: vflag++; ! 240: dfact = INCH; /*default scaling is points!*/ ! 241: dfactd = 72; ! 242: res = VERT; ! 243: i = inumb(&lss); ! 244: if(nonumb)i = lss1; ! 245: if(i < VERT)i = VERT; ! 246: lss1 = lss; ! 247: lss = i; ! 248: } ! 249: xlss(){ ! 250: register i, j; ! 251: ! 252: getch(); ! 253: dfact = lss; ! 254: i = quant(atoi(),VERT); ! 255: dfact = 1; ! 256: getch(); ! 257: if((j = i) < 0)j = -j; ! 258: ch0 = ((j & 03700)<<3) | HX; ! 259: if(i < 0)ch0 |= 040000; ! 260: return(((j & 077)<<9) | LX); ! 261: } ! 262: casefz(){} ! 263: caseps(){} ! 264: caselg(){} ! 265: casecs(){} ! 266: casebd(){} ! 267: casess(){} ! 268: getlg(i) ! 269: int i; ! 270: { ! 271: return(i); ! 272: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.