Bell 32V development
authorTom London <tbl@research.uucp>
Tue, 23 Jan 1979 12:20:57 +0000 (07:20 -0500)
committerTom London <tbl@research.uucp>
Tue, 23 Jan 1979 12:20:57 +0000 (07:20 -0500)
Work on file usr/src/slowsys/sys/cons.c

Co-Authored-By: John Reiser <jfr@research.uucp>
Synthesized-from: 32v

usr/src/slowsys/sys/cons.c [new file with mode: 0644]

diff --git a/usr/src/slowsys/sys/cons.c b/usr/src/slowsys/sys/cons.c
new file mode 100644 (file)
index 0000000..bb3075a
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ *   KL/DL-11 driver
+ */
+#include "../h/param.h"
+#include "../h/conf.h"
+#include "../h/dir.h"
+#include "../h/user.h"
+#include "../h/tty.h"
+#include "../h/systm.h"
+#include "../h/cons.h"
+#include "../h/mtpr.h"
+
+#define        NL1     000400
+#define        NL2     001000
+#define        CR2     020000
+#define        FF1     040000
+#define        TAB1    002000
+
+struct tty cons;
+int    consstart();
+int    ttrstrt();
+char   partab[];
+
+consopen(dev, flag)
+dev_t dev;
+{
+       register struct device *addr;
+       register struct tty *tp;
+       register d;
+
+       tp = &cons;
+       tp->t_oproc = consstart;
+       tp->t_iproc = NULL;
+       if ((tp->t_state&ISOPEN) == 0) {
+               tp->t_state = ISOPEN|CARR_ON;
+               tp->t_flags = EVENP|ECHO|XTABS|CRMOD;
+               tp->t_erase = CERASE;
+               tp->t_kill = CKILL;
+       }
+       mtpr(RXCS, mfpr(RXCS)|RXCS_IE);
+       mtpr(TXCS, mfpr(TXCS)|TXCS_IE);
+       ttyopen(dev, tp);
+}
+
+consclose(dev)
+dev_t dev;
+{
+       register struct tty *tp;
+
+       tp = &cons;
+       wflushtty(tp);
+       tp->t_state = 0;
+}
+
+consread(dev)
+dev_t dev;
+{
+       ttread(&cons);
+}
+
+conswrite(dev)
+dev_t dev;
+{
+       ttwrite(&cons);
+}
+
+consxint(dev)
+dev_t dev;
+{
+       register struct tty *tp;
+
+       tp = &cons;
+       ttstart(tp);
+       if (tp->t_outq.c_cc == 0 || tp->t_outq.c_cc == TTLOWAT)
+               wakeup((caddr_t)&tp->t_outq);
+}
+
+consrint(dev)
+dev_t dev;
+{
+       register int c;
+       register struct device *addr;
+       register struct tty *tp;
+
+       c = mfpr(RXDB);
+       ttyinput(c, &cons);
+}
+
+consioctl(dev,cmd,addr,flag)
+dev_t dev;
+caddr_t addr;
+{
+       register struct tty *tp;
+       tp = &cons;
+       if (ttioccom(cmd,tp,addr,dev) ==0)
+               u.u_error = ENOTTY;
+}
+
+consstart(tp)
+register struct tty *tp;
+{
+       register c;
+       register struct device *addr;
+
+       if( (mfpr(TXCS)&TXCS_RDY) == 0)
+               return;
+       if ((c=getc(&tp->t_outq)) >= 0) {
+               if (tp->t_flags&RAW)
+                       mtpr(TXDB, c&0xff);
+               else if (c<=0177)
+                       mtpr(TXDB, (c | (partab[c]&0200))&0xff);
+               else {
+                       timeout(ttrstrt, (caddr_t)tp, (c&0177));
+                       tp->t_state |= TIMEOUT;
+               }
+       }
+}
+
+char   *msgbufp = msgbuf;      /* Next saved printf character */
+/*
+ * Print a character on console.
+ * Attempts to save and restore device
+ * status.
+ * If the switches are 0, all
+ * printing is inhibited.
+ *
+ * Whether or not printing is inhibited,
+ * the last MSGBUFS characters
+ * are saved in msgbuf for inspection later.
+ */
+putchar(c)
+register c;
+{
+       register s, timo;
+
+       if (c != '\0' && c != '\r' && c != 0177) {
+               *msgbufp++ = c;
+               if(msgbufp >= &msgbuf[MSGBUFS])
+                       msgbufp = msgbuf;
+       }
+       timo = 30000;
+       /*
+        * Try waiting for the console tty to come ready,
+        * otherwise give up after a reasonable time.
+        */
+       while((mfpr(TXCS)&TXCS_RDY) == 0)
+               if(--timo == 0)
+                       break;
+       if(c == 0)
+               return;
+       s = mfpr(TXCS);
+       mtpr(TXCS,0);
+       mtpr(TXDB, c&0xff);
+       if(c == '\n') {
+               putchar('\r');
+       }
+       putchar(0);
+       mtpr(TXCS, s);
+}