date and time created 85/07/17 17:54:19 by jaap
authorJaap Akkerhuis <jaap@ucbvax.Berkeley.EDU>
Thu, 18 Jul 1985 08:54:19 +0000 (00:54 -0800)
committerJaap Akkerhuis <jaap@ucbvax.Berkeley.EDU>
Thu, 18 Jul 1985 08:54:19 +0000 (00:54 -0800)
SCCS-vsn: local/ditroff/ditroff.okeeffe/n2.c 1.1
SCCS-vsn: local/ditroff/ditroff.okeeffe/troff/n2.c 1.1

usr/src/local/ditroff/ditroff.okeeffe/n2.c [new file with mode: 0644]
usr/src/local/ditroff/ditroff.okeeffe/troff/n2.c [new file with mode: 0644]

diff --git a/usr/src/local/ditroff/ditroff.okeeffe/n2.c b/usr/src/local/ditroff/ditroff.okeeffe/n2.c
new file mode 100644 (file)
index 0000000..94c92c9
--- /dev/null
@@ -0,0 +1,349 @@
+#ifndef lint
+static char sccsid[] = "@(#)n2.c       1.1 (CWI) 85/07/17";
+#endif lint
+
+#include "tdef.h"
+#include <sgtty.h>
+extern
+#include "d.h"
+extern
+#include "v.h"
+#ifdef NROFF
+extern
+#include "tw.h"
+#endif
+#include "s.h"
+#include <setjmp.h>
+
+/*
+troff2.c
+
+output, cleanup
+*/
+
+#include "ext.h"
+extern jmp_buf sjbuf;
+int    toolate;
+int    error;
+
+pchar(i)
+tchar i;
+{
+       int j;
+       static int hx = 0;      /* records if have seen HX */
+
+       if (hx) {
+               hx = 0;
+               j = absmot(i);
+               if (isnmot(i)) {
+                       if (j > dip->blss)
+                               dip->blss = j;
+               } else {
+                       if (j > dip->alss)
+                               dip->alss = j;
+                       ralss = dip->alss;
+               }
+               return;
+       }
+       if (ismot(i)) {
+               pchar1(i); 
+               return;
+       }
+       switch (j = cbits(i)) {
+       case 0:
+       case IMP:
+       case RIGHT:
+       case LEFT:
+               return;
+       case HX:
+               hx = 1;
+               return;
+       case PRESC:
+               if (dip == &d[0])
+                       j = eschar;     /* fall through */
+       default:
+               setcbits(i, trtab[j]);
+       }
+       pchar1(i);
+}
+
+
+pchar1(i)
+tchar i;
+{
+       register j, *k;
+       static int seendraw;
+
+       j = cbits(i);
+       if (dip != &d[0]) {
+               wbf(i);
+               dip->op = offset;
+               return;
+       }
+       if (!tflg && !print) {
+               if (j == '\n')
+                       dip->alss = dip->blss = 0;
+               return;
+       }
+       if (no_out || j == FILLER)
+               return;
+       if (tflg) {     /* transparent mode, undiverted */
+               fprintf(ptid, "%c", j);
+               return;
+       }
+#ifndef NROFF
+       if (ascii) {
+               if (ismot(i)) {
+                       if(!seendraw) {
+                               oput(' ');
+                       }
+                       return;
+               }
+               if (j < 0177 && j >= 040) {
+                       if(!seendraw) {
+                               oput(j);
+                               return;
+                       } else {
+                               switch(j) {
+                                       case DRAWCIRCLE: oputs("CIRCLE");
+                                               break;
+                                       case DRAWELLIPSE: oputs("ELLIPSE");
+                                               break;
+                                       case DRAWLINE: oputs("LINE");
+                                               break;
+                                       case DRAWWIG: oputs("SPLINE");
+                                               break;
+                                       case DRAWARC: oputs("ARC");
+                                               break;
+                                       case '.':
+                                               if(seendraw == 2)
+                                                       seendraw = 0;
+                                               else
+                                                       seendraw++;
+                                               break;
+                                       default: oputs("UNKNOWN");
+                                               break;
+                               }
+                               return;
+                       }
+               }
+               if( j < 040) {
+                       switch(j) {
+                               case SLANT:
+                               case CHARHT:
+                               case WORDSP:
+                               case HX:
+                               case FONTPOS:   /* creeps in as well */
+                                       return;
+                               case DRAWFCN:
+                                       seendraw++;
+                                       oputs("DRAWFUNCTION ");
+                                       return;
+                               case '\n':
+                                       oput(j);
+                                       return;
+                               default:
+                                       fprintf(stderr,"Unknown 0%o function\n",
+                                                               j);
+                                       return;
+                       }
+               }
+                                       
+               if (j == HYPHEN || j == MINUS)
+                       oput('-');
+               else if (j == LIG_FI)
+                       oputs("fi");
+               else if (j == LIG_FL)
+                       oputs("fl");
+               else if (j == LIG_FF)
+                       oputs("ff");
+               else if (j == LIG_FFI)
+                       oputs("ffi");
+               else if (j == LIG_FFL)
+                       oputs("ffl");
+               else if (j == NARSP || j == HNARSP || j == WORDSP)
+                       ;       /* nothing at all */
+               else {
+                       oput('\\');
+                       oput('(');
+                       oput(chname[chtab[j-128]]);
+                       oput(chname[chtab[j-128]+1]);
+               }
+       } else
+#endif
+               ptout(i);
+}
+
+
+oput(i)
+char   i;
+{
+       *obufp++ = i;
+       if (obufp >= &obuf[OBUFSZ])
+               flusho();
+}
+
+
+oputs(i)
+register char  *i;
+{
+       while (*i != 0)
+               oput(*i++);
+}
+
+
+flusho()
+{
+       if (obufp == obuf)
+               return;
+       if (no_out == 0) {
+               if (!toolate) {
+                       toolate++;
+#ifdef NROFF
+                       if (t.bset || t.breset) {
+                               if (ttysave == -1) {
+                                       gtty(1, &ttys);
+                                       ttysave = ttys.sg_flags;
+                               }
+                               ttys.sg_flags &= ~t.breset;
+                               ttys.sg_flags |= t.bset;
+                               stty(1, &ttys);
+                       }
+                        {
+                               char    *p = t.twinit;
+                               while (*p++)
+                                       ;
+                               write(ptid, t.twinit, p - t.twinit - 1);
+                       }
+#endif
+               }
+               toolate += write(ptid, obuf, obufp - obuf);
+       }
+       obufp = obuf;
+}
+
+
+done(x) 
+int    x;
+{
+       register i;
+
+       error |= x;
+       level = 0;
+       app = ds = lgf = 0;
+       if (i = em) {
+               donef = -1;
+               em = 0;
+               if (control(i, 0))
+                       longjmp(sjbuf, 1);
+       }
+       if (!nfo)
+               done3(0);
+       mflg = 0;
+       dip = &d[0];
+       if (woff)
+               wbt((tchar)0);
+       if (pendw)
+               getword(1);
+       pendnf = 0;
+       if (donef == 1)
+               done1(0);
+       donef = 1;
+       ip = 0;
+       frame = stk;
+       nxf = frame + 1;
+       if (!ejf)
+               tbreak();
+       nflush++;
+       eject((struct s *)0);
+       longjmp(sjbuf, 1);
+}
+
+
+done1(x) 
+int    x; 
+{
+       error |= x;
+       if (v.nl) {
+               trap = 0;
+               eject((struct s *)0);
+               longjmp(sjbuf, 1);
+       }
+       if (nofeed) {
+               ptlead();
+               flusho();
+               done3(0);
+       } else {
+               if (!gflag)
+                       pttrailer();
+               done2(0);
+       }
+}
+
+
+done2(x) 
+int    x; 
+{
+       ptlead();
+#ifndef NROFF
+       if (!ascii)
+               ptstop();
+#endif
+       flusho();
+       done3(x);
+}
+
+done3(x) 
+int    x;
+{
+       error |= x;
+       signal(SIGINT, SIG_IGN);
+       signal(SIGTERM, SIG_IGN);
+       unlink(unlkp);
+#ifdef NROFF
+       twdone();
+#endif
+       if (quiet) {
+               ttys.sg_flags |= ECHO;
+               stty(0, &ttys);
+       }
+       if (ascii)
+               mesg(1);
+       exit(error);
+}
+
+
+edone(x) 
+int    x;
+{
+       frame = stk;
+       nxf = frame + 1;
+       ip = 0;
+       done(x);
+}
+
+
+
+casepi()
+{
+       register i;
+       int     id[2];
+
+       if (toolate || skip() || !getname() || pipe(id) == -1 || (i = fork()) == -1) {
+               fprintf(stderr, "Pipe not created.\n");
+               return;
+       }
+       ptid = id[1];
+       if (i > 0) {
+               close(id[0]);
+               toolate++;
+               pipeflg++;
+               return;
+       }
+       close(0);
+       dup(id[0]);
+       close(id[1]);
+       execl(nextf, nextf, 0);
+       fprintf(stderr, "Cannot exec %s\n", nextf);
+       exit(-4);
+}
diff --git a/usr/src/local/ditroff/ditroff.okeeffe/troff/n2.c b/usr/src/local/ditroff/ditroff.okeeffe/troff/n2.c
new file mode 100644 (file)
index 0000000..94c92c9
--- /dev/null
@@ -0,0 +1,349 @@
+#ifndef lint
+static char sccsid[] = "@(#)n2.c       1.1 (CWI) 85/07/17";
+#endif lint
+
+#include "tdef.h"
+#include <sgtty.h>
+extern
+#include "d.h"
+extern
+#include "v.h"
+#ifdef NROFF
+extern
+#include "tw.h"
+#endif
+#include "s.h"
+#include <setjmp.h>
+
+/*
+troff2.c
+
+output, cleanup
+*/
+
+#include "ext.h"
+extern jmp_buf sjbuf;
+int    toolate;
+int    error;
+
+pchar(i)
+tchar i;
+{
+       int j;
+       static int hx = 0;      /* records if have seen HX */
+
+       if (hx) {
+               hx = 0;
+               j = absmot(i);
+               if (isnmot(i)) {
+                       if (j > dip->blss)
+                               dip->blss = j;
+               } else {
+                       if (j > dip->alss)
+                               dip->alss = j;
+                       ralss = dip->alss;
+               }
+               return;
+       }
+       if (ismot(i)) {
+               pchar1(i); 
+               return;
+       }
+       switch (j = cbits(i)) {
+       case 0:
+       case IMP:
+       case RIGHT:
+       case LEFT:
+               return;
+       case HX:
+               hx = 1;
+               return;
+       case PRESC:
+               if (dip == &d[0])
+                       j = eschar;     /* fall through */
+       default:
+               setcbits(i, trtab[j]);
+       }
+       pchar1(i);
+}
+
+
+pchar1(i)
+tchar i;
+{
+       register j, *k;
+       static int seendraw;
+
+       j = cbits(i);
+       if (dip != &d[0]) {
+               wbf(i);
+               dip->op = offset;
+               return;
+       }
+       if (!tflg && !print) {
+               if (j == '\n')
+                       dip->alss = dip->blss = 0;
+               return;
+       }
+       if (no_out || j == FILLER)
+               return;
+       if (tflg) {     /* transparent mode, undiverted */
+               fprintf(ptid, "%c", j);
+               return;
+       }
+#ifndef NROFF
+       if (ascii) {
+               if (ismot(i)) {
+                       if(!seendraw) {
+                               oput(' ');
+                       }
+                       return;
+               }
+               if (j < 0177 && j >= 040) {
+                       if(!seendraw) {
+                               oput(j);
+                               return;
+                       } else {
+                               switch(j) {
+                                       case DRAWCIRCLE: oputs("CIRCLE");
+                                               break;
+                                       case DRAWELLIPSE: oputs("ELLIPSE");
+                                               break;
+                                       case DRAWLINE: oputs("LINE");
+                                               break;
+                                       case DRAWWIG: oputs("SPLINE");
+                                               break;
+                                       case DRAWARC: oputs("ARC");
+                                               break;
+                                       case '.':
+                                               if(seendraw == 2)
+                                                       seendraw = 0;
+                                               else
+                                                       seendraw++;
+                                               break;
+                                       default: oputs("UNKNOWN");
+                                               break;
+                               }
+                               return;
+                       }
+               }
+               if( j < 040) {
+                       switch(j) {
+                               case SLANT:
+                               case CHARHT:
+                               case WORDSP:
+                               case HX:
+                               case FONTPOS:   /* creeps in as well */
+                                       return;
+                               case DRAWFCN:
+                                       seendraw++;
+                                       oputs("DRAWFUNCTION ");
+                                       return;
+                               case '\n':
+                                       oput(j);
+                                       return;
+                               default:
+                                       fprintf(stderr,"Unknown 0%o function\n",
+                                                               j);
+                                       return;
+                       }
+               }
+                                       
+               if (j == HYPHEN || j == MINUS)
+                       oput('-');
+               else if (j == LIG_FI)
+                       oputs("fi");
+               else if (j == LIG_FL)
+                       oputs("fl");
+               else if (j == LIG_FF)
+                       oputs("ff");
+               else if (j == LIG_FFI)
+                       oputs("ffi");
+               else if (j == LIG_FFL)
+                       oputs("ffl");
+               else if (j == NARSP || j == HNARSP || j == WORDSP)
+                       ;       /* nothing at all */
+               else {
+                       oput('\\');
+                       oput('(');
+                       oput(chname[chtab[j-128]]);
+                       oput(chname[chtab[j-128]+1]);
+               }
+       } else
+#endif
+               ptout(i);
+}
+
+
+oput(i)
+char   i;
+{
+       *obufp++ = i;
+       if (obufp >= &obuf[OBUFSZ])
+               flusho();
+}
+
+
+oputs(i)
+register char  *i;
+{
+       while (*i != 0)
+               oput(*i++);
+}
+
+
+flusho()
+{
+       if (obufp == obuf)
+               return;
+       if (no_out == 0) {
+               if (!toolate) {
+                       toolate++;
+#ifdef NROFF
+                       if (t.bset || t.breset) {
+                               if (ttysave == -1) {
+                                       gtty(1, &ttys);
+                                       ttysave = ttys.sg_flags;
+                               }
+                               ttys.sg_flags &= ~t.breset;
+                               ttys.sg_flags |= t.bset;
+                               stty(1, &ttys);
+                       }
+                        {
+                               char    *p = t.twinit;
+                               while (*p++)
+                                       ;
+                               write(ptid, t.twinit, p - t.twinit - 1);
+                       }
+#endif
+               }
+               toolate += write(ptid, obuf, obufp - obuf);
+       }
+       obufp = obuf;
+}
+
+
+done(x) 
+int    x;
+{
+       register i;
+
+       error |= x;
+       level = 0;
+       app = ds = lgf = 0;
+       if (i = em) {
+               donef = -1;
+               em = 0;
+               if (control(i, 0))
+                       longjmp(sjbuf, 1);
+       }
+       if (!nfo)
+               done3(0);
+       mflg = 0;
+       dip = &d[0];
+       if (woff)
+               wbt((tchar)0);
+       if (pendw)
+               getword(1);
+       pendnf = 0;
+       if (donef == 1)
+               done1(0);
+       donef = 1;
+       ip = 0;
+       frame = stk;
+       nxf = frame + 1;
+       if (!ejf)
+               tbreak();
+       nflush++;
+       eject((struct s *)0);
+       longjmp(sjbuf, 1);
+}
+
+
+done1(x) 
+int    x; 
+{
+       error |= x;
+       if (v.nl) {
+               trap = 0;
+               eject((struct s *)0);
+               longjmp(sjbuf, 1);
+       }
+       if (nofeed) {
+               ptlead();
+               flusho();
+               done3(0);
+       } else {
+               if (!gflag)
+                       pttrailer();
+               done2(0);
+       }
+}
+
+
+done2(x) 
+int    x; 
+{
+       ptlead();
+#ifndef NROFF
+       if (!ascii)
+               ptstop();
+#endif
+       flusho();
+       done3(x);
+}
+
+done3(x) 
+int    x;
+{
+       error |= x;
+       signal(SIGINT, SIG_IGN);
+       signal(SIGTERM, SIG_IGN);
+       unlink(unlkp);
+#ifdef NROFF
+       twdone();
+#endif
+       if (quiet) {
+               ttys.sg_flags |= ECHO;
+               stty(0, &ttys);
+       }
+       if (ascii)
+               mesg(1);
+       exit(error);
+}
+
+
+edone(x) 
+int    x;
+{
+       frame = stk;
+       nxf = frame + 1;
+       ip = 0;
+       done(x);
+}
+
+
+
+casepi()
+{
+       register i;
+       int     id[2];
+
+       if (toolate || skip() || !getname() || pipe(id) == -1 || (i = fork()) == -1) {
+               fprintf(stderr, "Pipe not created.\n");
+               return;
+       }
+       ptid = id[1];
+       if (i > 0) {
+               close(id[0]);
+               toolate++;
+               pipeflg++;
+               return;
+       }
+       close(0);
+       dup(id[0]);
+       close(id[1]);
+       execl(nextf, nextf, 0);
+       fprintf(stderr, "Cannot exec %s\n", nextf);
+       exit(-4);
+}