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