Annotation of researchv9/jerq/src/lib/sys/queue.c, revision 1.1.1.1

1.1       root        1: #define QUEUE_C
                      2: #include <queue.h>
                      3: #include <setup.h>
                      4: 
                      5: /*
                      6:  * These macros are for speed, not size.
                      7:  */
                      8: #define pswmax()       asm("   PUSHW   %psw    ");\
                      9:                        asm("   ORW2    &0x1e000,%psw ");\
                     10:                        asm("   TSTW    %r0     ")
                     11: 
                     12: #define pswback()      asm("   POPW    %psw    ");\
                     13:                        asm("   TSTW    %r0     ")
                     14: qinit(){
                     15:        register i;
                     16: 
                     17:        for(i=1; i<NCHARS-1; i++)
                     18:                cbuf_next[i] = i+1;
                     19:        cbuf_next[i] = 0;
                     20:        freelist=1;
                     21:        freemark = (9*NCHARS)/10;
                     22: }
                     23: qputc(q, w)
                     24:        register struct clist *q;
                     25:        int w;
                     26: {
                     27:        register p;
                     28:        pswmax();
                     29:        p=freelist;
                     30:        if(p==0 || (freemark <= 0 && !(q->state & QPRIORITY))){
                     31:                pswback();
                     32:                if(!VALDWNLDFLAG )
                     33:                        ringbell();     /* send a warning to the user */
                     34:                return(0);
                     35:        }
                     36:        freelist=cbuf_next[p];
                     37:        --freemark;
                     38:        cbuf_next[p]=0;
                     39:        cbuf_word[p]=w;
                     40:        if(q->c_cc==0)
                     41:                q->c_head=q->c_tail=p;
                     42:        else{
                     43:                cbuf_next[q->c_tail]=p;
                     44:                q->c_tail=p;
                     45:        }
                     46:        p = ++q->c_cc;
                     47:        pswback();
                     48:        return(p);
                     49: }
                     50: qputstr(q, str)
                     51:        register struct clist *q;
                     52:        register char *str;
                     53: {
                     54:        register retval;
                     55:        do; while(*str && ((retval=qputc(q, *str++))>=0));
                     56:        return retval;
                     57: }
                     58: qgetc(q)
                     59:        register struct clist *q;
                     60: {
                     61:        register p;
                     62:        register x;
                     63:        pswmax();
                     64:        if((p=q->c_head)==0){
                     65:                pswback();
                     66:                return(-1);
                     67:        }
                     68:        if(--q->c_cc==0)
                     69:                q->c_head=q->c_tail=0;
                     70:        else
                     71:                q->c_head=cbuf_next[p];
                     72:        cbuf_next[p]=freelist;
                     73:        x=cbuf_word[p];
                     74:        freelist=p;
                     75:        ++freemark;
                     76:        pswback();
                     77:        return(x);
                     78: }
                     79: qclear(q)
                     80:        register struct clist *q;
                     81: {
                     82:        pswmax();
                     83:        if(q->c_cc == 0){
                     84:                pswback();
                     85:                return;
                     86:        }
                     87:        freemark += q->c_cc;
                     88:        q->c_cc=0;
                     89:        cbuf_next[q->c_tail]=freelist;
                     90:        freelist=q->c_head;
                     91:        q->c_head=0;
                     92:        q->c_tail=0;
                     93:        q->state=0;
                     94:        pswback();
                     95: }
                     96: qpeekc(q)
                     97:        register struct clist *q;
                     98: {
                     99:        register p;
                    100:        return (p=q->c_head) ? cbuf_word[p] : -1;
                    101: }

unix.superglobalmegacorp.com

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