File:  [Research Unix] / researchv9 / jerq / src / lib / sys / queue.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:59 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv9-SUN3_old, researchv9-SUN3, HEAD
researchv9-SUN3(old)

#define QUEUE_C
#include <queue.h>
#include <setup.h>

/*
 * These macros are for speed, not size.
 */
#define pswmax()	asm("	PUSHW	%psw	");\
			asm("	ORW2	&0x1e000,%psw ");\
			asm("	TSTW	%r0	")

#define pswback()	asm("	POPW	%psw	");\
			asm("   TSTW    %r0     ")
qinit(){
	register i;

	for(i=1; i<NCHARS-1; i++)
		cbuf_next[i] = i+1;
	cbuf_next[i] = 0;
	freelist=1;
	freemark = (9*NCHARS)/10;
}
qputc(q, w)
	register struct clist *q;
	int w;
{
	register p;
	pswmax();
	p=freelist;
	if(p==0 || (freemark <= 0 && !(q->state & QPRIORITY))){
		pswback();
		if(!VALDWNLDFLAG )
			ringbell();	/* send a warning to the user */
		return(0);
	}
	freelist=cbuf_next[p];
	--freemark;
	cbuf_next[p]=0;
	cbuf_word[p]=w;
	if(q->c_cc==0)
		q->c_head=q->c_tail=p;
	else{
		cbuf_next[q->c_tail]=p;
		q->c_tail=p;
	}
	p = ++q->c_cc;
	pswback();
	return(p);
}
qputstr(q, str)
	register struct clist *q;
	register char *str;
{
	register retval;
	do; while(*str && ((retval=qputc(q, *str++))>=0));
	return retval;
}
qgetc(q)
	register struct clist *q;
{
	register p;
	register x;
	pswmax();
	if((p=q->c_head)==0){
		pswback();
		return(-1);
	}
	if(--q->c_cc==0)
		q->c_head=q->c_tail=0;
	else
		q->c_head=cbuf_next[p];
	cbuf_next[p]=freelist;
	x=cbuf_word[p];
	freelist=p;
	++freemark;
	pswback();
	return(x);
}
qclear(q)
	register struct clist *q;
{
	pswmax();
	if(q->c_cc == 0){
		pswback();
		return;
	}
	freemark += q->c_cc;
	q->c_cc=0;
	cbuf_next[q->c_tail]=freelist;
	freelist=q->c_head;
	q->c_head=0;
	q->c_tail=0;
	q->state=0;
	pswback();
}
qpeekc(q)
	register struct clist *q;
{
	register p;
	return (p=q->c_head) ? cbuf_word[p] : -1;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.