From: Kirk McKusick Date: Sat, 4 Dec 1982 11:06:08 +0000 (-0800) Subject: date and time created 82/12/03 19:06:08 by mckusick X-Git-Tag: BSD-4_1c_2-Snapshot-Development~1712 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/d70a52f41acdf19b59cfdda841cdb8b089a9bfa5 date and time created 82/12/03 19:06:08 by mckusick SCCS-vsn: old/roff/troff/t10.c 4.1 --- diff --git a/usr/src/old/roff/troff/t10.c b/usr/src/old/roff/troff/t10.c new file mode 100644 index 0000000000..a378b47be6 --- /dev/null +++ b/usr/src/old/roff/troff/t10.c @@ -0,0 +1,319 @@ +#ifndef lint +static char sccsid[] = "@(#)t10.c 4.1 (Berkeley) 82/12/03"; +#endif + +#include "tdef.h" +extern +#include "d.h" +extern +#include "v.h" +/* +troff10.c + +CAT interface +*/ + +extern int *olinep; +extern int oline[]; +extern int *pslp; +extern int back; +extern int xpts; +extern int mpts; +extern int po; +extern int xflg; +extern int line[]; +extern int lss; +extern int xbitf; +extern char obuf[]; +extern char *obufp; +extern int esct; +extern int trflg; +extern int cs; +extern int smnt; +extern int mfont; +extern int xfont; +extern int code; +extern int mcase; +extern int esc; +extern int lead; +extern int paper; +extern int cps; +extern int psflg; +extern int ptid; +extern int verm; +extern int escm; +extern char pstab[], psctab[]; +extern int dpn; +extern int ascii; +int mrail = 0; /*0=LR,1=UR*/ +int mmag = 1; /*0=UM,1=LM*/ +extern int nofeed; +extern int gflag; +extern int fontlab[]; +int papflg; +extern int pfont; +extern int ppts; +extern int oldbits; +extern int bd; +extern int vflag; +extern int stopmesg; +extern int xxx; + +ptinit(){ + + if(ascii || gflag)return; + oput(T_INIT); + esc = T_IESC; + ptesc(); + esct = 0; + esc = po; + oput(0140); /*some initial lead*/ +} +ptout(i) +int i; +{ + register *k, lw, *j; + int ds, de, inith, temp, *slp, dv; + int psl[16]; + + if((i & CMASK) != '\n'){ + *olinep++ = i; + return; + } + if(olinep == oline){ + lead += lss; + return; + } + pslp = psl; + *pslp = lw = inith = dv = 0; + for(k=oline; kblss + lss; + dip->blss = 0; + slp = k; +scan: + temp = esct - po; + if(mpts & DBL)temp -= 55; + ds = temp - inith; + de = lw - temp; + if(de >= ds){ + back = 0; + esc = -ds; + for(k=slp; k=slp; --k)ptout0(*k); + } + if(xflg && (--pslp >= psl))goto scan; + olinep = oline; + lead += dip->alss; + dip->alss = 0; +} +ptout0(i) +int i; +{ + register j, k, w; + int z; + + if(i & MOT){ + j = i & ~MOTV; + if(i & NMOT)j = -j; + if(back)j = -j; + if(i & VMOT)lead += j; + else esc += j; + return; + } + xbitf = 2; + if((i>>BYTE) == oldbits){ + xfont = pfont; + xpts = ppts; + xbitf = 0; + }else xbits(i); + if((k = (i & CMASK)) < 040){ + return; + } + w = getcw(k-32); + if(cs){ + if(bd)w += bd - 1; + j = (cs-w)/2; + w = cs - j; + if(bd)w -= bd - 1; + }else j = 0; + if(i & ZBIT){ + if(cs)w = -j; else w = 0; + z = 1; + }else z = 0; + if(back){ + k = j; + j = -w; + w = -k; + } + esc += j; + if((!xflg || (xpts == *pslp)) && (code & 077)){ + if(code & 0200){ + if(smnt)xfont = smnt -1; + else goto p1; + } + if((k=(code>>6)&01)^mcase)oput((mcase=k)+0105); + if(xfont != mfont){ + mfont = xfont; + if(mrail != (xfont&01)) + oput(0101 + (mrail=xfont&01)); + if(mmag != (xfont<2)) + oput(0103 + (mmag=(xfont<2))); + } + if(xpts != mpts)ptps(); + if(lead)ptlead(); + if(esc)ptesc(); +/* + oput(code & 077); +*/ + *obufp++ = code & 077; + if(obufp == (obuf + OBUFSZ + ascii - 1))flusho(); + if(bd){ + bd -= 1; + if(back && !z)bd = -bd; + if(esc += bd)ptesc(); + oput(code & 077); + if(z)esc -= bd; + } + }else if(bd && !z){ + bd -= 1; + if(back)bd = -bd; + esc += bd; + } +p1: + esc += w; + return; +} +ptps(){ + register i, j, k; + + if(psflg)return; + if(cps){ + psflg++; + i = findps(cps); + }else i = xpts; + for(j=0; (i&077) > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;} + j = psctab[j]; + oput((j & ~0200) | 0120); + if((!(mpts & DBL))^(!(j & 0200))){ + if(j & 0200)k = 55; + else k = -55; + esc += k; + } + mpts = i; +} +ptlead(){ + register i, k; + + if(k = lead < 0)lead = -lead; + if(k^verm)oput(0112 + ((verm=k)<<1)); + if(((k=lead)%3) == 2)k++; + k /= 3; + while(k > 0){ + if((i=31) > k)i = k; + if(verm)paper -= i; + else paper += i; + oput(((~i) & 037) | 0140); + if((paper > (11*144*15)) && !papflg && ptid != 1){ + prstr("Excessive paper use.\n"); + papflg++; + if(ptid != 1){ + lead = 0; + done2(0200); + } + } + k -= i; + } + lead = 0; +} +ptesc(){ + register i, j, k; + + if(k = esc < 0)esc = -esc; + if(k^escm)oput(0107 + (escm=k)); + k = esc; + while(k > 0){ + if((i=127) > k)i = k; + if(((j = (esct + i*(1-2*escm))) > (46*72+18-T_IESC)) || + (j < 0))break; +/* + oput(~i); +*/ + *obufp++ = ~i; + if(obufp == (obuf + OBUFSZ + ascii - 1))flusho(); + esct = j; + k -= i; + } + esc = 0; +} +dostop(){ + register i; + + if(ascii)return; + if(!nofeed && !gflag)lead += TRAILER; + ptlead(); + flusho(); + oput(T_INIT); + oput(T_STOP); + if(gflag){ + oput('f'); + for(i=0; i<4; i++){ + oput(fontlab[i] & BMASK); + oput((fontlab[i]>>BYTE) & BMASK); + } + }else for(i=8; i>0; i--)oput(T_PAD); + flusho(); + if(stopmesg)prstr("Pages finished.\n"); + mcase = mpts = mfont = mrail = verm = escm = 0; + mmag = 1; + report(); + paper = 0; + esc = T_IESC; + ptesc(); + esct = 0; + esc = po; +}