Annotation of researchv9/jerq/src/lib/sys/oqueue.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 struct cbuf *p, *q;
                     16: 
                     17:        q=0;
                     18:        for(p=cbufs; p<&cbufs[NCHARS]; p++){
                     19:                p->next=q;
                     20:                q=p;
                     21:        }
                     22:        freelist=q;
                     23: }
                     24: qputc(q, w)
                     25:        register struct clist *q;
                     26:        register w;
                     27: {
                     28:        register cc;
                     29:        register struct cbuf *p;
                     30:        pswmax();
                     31:        p=freelist;
                     32:        if(p==0){
                     33:                pswback();
                     34:                if(!VALDWNLDFLAG )
                     35:                        ringbell();     /* send a warning to the user */
                     36:                return(0);
                     37:        }
                     38:        freelist=p->next;
                     39:        p->next=0;
                     40:        p->word=w;
                     41:        if(q->c_cc==0)
                     42:                q->c_head=q->c_tail=p;
                     43:        else{
                     44:                q->c_tail->next=p;
                     45:                q->c_tail=p;
                     46:        }
                     47:        cc= ++q->c_cc;
                     48:        pswback();
                     49:        return(cc);
                     50: }
                     51: qputstr(q, str)
                     52:        register struct clist *q;
                     53:        register char *str;
                     54: {
                     55:        register retval;
                     56:        do; while(*str && ((retval=qputc(q, *str++))>=0));
                     57:        return retval;
                     58: }
                     59: qgetc(q)
                     60:        register struct clist *q;
                     61: {
                     62:        register struct cbuf *p;
                     63:        register x;
                     64:        pswmax();
                     65:        if((p=q->c_head)==0){
                     66:                pswback();
                     67:                return(-1);
                     68:        }
                     69:        if(--q->c_cc==0)
                     70:                q->c_head=q->c_tail=0;
                     71:        else
                     72:                q->c_head=p->next;
                     73:        p->next=freelist;
                     74:        x=p->word;
                     75:        freelist=p;
                     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:        q->c_cc=0;
                     88:        q->c_tail->next=freelist;
                     89:        freelist=q->c_head;
                     90:        q->c_head=0;
                     91:        q->c_tail=0;
                     92:        pswback();
                     93: }

unix.superglobalmegacorp.com

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