Annotation of researchv9/jerq/src/lib/sys/oqueue.c, revision 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.