-/* tty_subr.c 4.5 %G% */
+/* tty_subr.c 4.15 82/03/14 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/conf.h"
#include "../h/buf.h"
#include "../h/tty.h"
-#include "tr.h"
+#include "../h/clist.h"
-struct cblock {
- struct cblock *c_next;
- char c_info[CBSIZE];
-};
-
-struct cblock cfree[NCLIST];
-struct cblock *cfreelist;
-
-int cfreecount;
char cwaiting;
/*
register struct cblock *bp;
register int c, s;
- s = spl6();
+ s = spl5();
if (p->c_cc <= 0) {
c = -1;
p->c_cc = 0;
return(c);
}
-#if HAVTR > 0
-trgetc(p)
-register struct clist *p;
-{
- register struct cblock *bp;
- register int c, s;
-
- if (p->c_cc <= 0) {
- c = -1;
- p->c_cc = 0;
- p->c_cf = NULL;
- } else {
- c = *p->c_cf++ & 0377;
- if (--p->c_cc<=0) {
- p->c_cf = NULL;
- } else if (((int)p->c_cf & CROUND) == 0) {
- bp = (struct cblock *)(p->c_cf);
- bp--;
- p->c_cf = bp->c_next->c_info;
- }
- }
- return(c);
-}
-#endif
-
+#if notdef
/*
* copy clist to buffer.
* return number of bytes moved.
if (cc <= 0)
return(0);
- s = spl6();
+ s = spl5();
if (q->c_cc <= 0) {
q->c_cc = 0;
q->c_cf = q->c_cl = NULL;
splx(s);
return(cp-acp);
}
-
-#if HAVTR > 0
-/*
- * Traverse a clist copying its contents to a buffer.
- * q->cc and q->cf are updated with the current position
- * in the list, but bytes are not released to the freelist.
- */
-trq_to_b(q, cp, cc)
-register struct clist *q;
-register char *cp;
-register cc;
-{
- register struct cblock *bp;
- char *acp;
-
- if (cc <= 0)
- return(0);
- if (q->c_cc <= 0)
- return(0);
-
- acp = cp;
- cc++;
- while (--cc) {
- *cp++ = *q->c_cf++;
- if (((int)q->c_cf & CROUND) == 0) {
- bp = (struct cblock *)(q->c_cf);
- bp--;
- q->c_cf = bp->c_next->c_info;
- }
- if (--q->c_cc <= 0)
- break;
- }
- return(cp-acp);
-}
#endif
-
/*
* Return count of contiguous characters
* in clist starting at q->c_cf.
register cc;
int s;
- s = spl6();
+ s = spl5();
if (q->c_cc <= 0) {
cc = -q->c_cc;
goto out;
int rem;
register s;
- s = spl6();
+ s = spl5();
if (q->c_cc < 0) {
printf("neg q flush\n");
goto out;
register char *cp;
register s;
- s = spl6();
+ s = spl5();
if ((cp = p->c_cl) == NULL || p->c_cc < 0 ) {
if ((bp = cfreelist) == NULL) {
splx(s);
acc = cc;
- s = spl6();
+ s = spl5();
if ((cq = q->c_cl) == NULL || q->c_cc < 0) {
if ((bp = cfreelist) == NULL)
goto out;
return(cc);
}
-char *
-wb_to_q(cp, cc, q)
-register char *cp;
-register struct clist *q;
-register cc;
-{
-char *f;
-register s;
-
- s = spl6();
- while (cc > cfreecount) {
- cwaiting = 1;
- sleep(&cwaiting, TTOPRI);
- }
- if (q->c_cc==0) {
- b_to_q(cp, cc, q);
- f = q->c_cf;
- } else {
- (void) putc(*cp++, q);
- f = q->c_cl;
- f--;
- b_to_q(cp, --cc, q);
- }
- splx(s);
- return(f);
-}
-
-#ifdef UCBIPC
-char *
-nb_to_q(cp, cc, q)
-register char *cp;
-register struct clist *q;
-register cc;
-{
-char *f;
-register s;
-
- s = spl6();
- if (cc > cfreecount) {
- f = NULL;
- goto out;
- }
- if (q->c_cc==0) {
- b_to_q(cp, cc, q);
- f = q->c_cf;
- } else {
- (void) putc(*cp++, q);
- f = q->c_cl;
- f--;
- b_to_q(cp, --cc, q);
- }
-out:
- splx(s);
- return(f);
-}
-#endif
-
/*
* Given a non-NULL pointter into the list (like c_cf which
* always points to a real character if non-NULL) return the pointer
register int c, s;
struct cblock *obp;
- s = spl6();
+ s = spl5();
if (p->c_cc <= 0)
c = -1;
else {
(void) putc(c, to);
}
-/*
- * Initialize clist by freeing all character blocks, then count
- * number of character devices. (Once-only routine)
- */
-cinit()
-{
- register int ccp;
- register struct cblock *cp;
- register struct cdevsw *cdp;
-
- ccp = (int)cfree;
- ccp = (ccp+CROUND) & ~CROUND;
- for(cp=(struct cblock *)ccp; cp < &cfree[NCLIST-1]; cp++) {
- cp->c_next = cfreelist;
- cfreelist = cp;
- cfreecount += CBSIZE;
- }
- ccp = 0;
- for(cdp = cdevsw; cdp->d_open; cdp++)
- ccp++;
- nchrdev = ccp;
-}
-
-
+#include "dmc.h"
+#if NDMC > 0
/*
* integer (2-byte) get/put
* using clists
return(s | (getc(p)<<8));
}
-#if HAVTR > 0
-trgetw(p)
-register struct clist *p;
-{
- register int w;
-
- if (p->c_cc <=1)
- return(-1);
- w = trgetc(p);
- return(w | (trgetc(p)<<8));
-}
-#endif
-
putw(c, p)
register struct clist *p;
{
register s;
- s = spl6();
+ s = spl5();
if (cfreelist==NULL) {
splx(s);
return(-1);
splx(s);
return(0);
}
+#endif