Annotation of researchv10dc/630/src/comm.c, revision 1.1

1.1     ! root        1: #include <jerq.h>
        !             2: #include <layer.h>
        !             3: #include <queue.h>
        !             4: #include <jerqproc.h>
        !             5: #include <setup.h>
        !             6: #include <kbd.h>
        !             7: 
        !             8: #ifdef BLITKBD
        !             9: #define        REBOOTKEY       0xEC    /* ctrl-shift-BREAK */
        !            10: #else
        !            11: #define        REBOOTKEY       0x81    /* discon */
        !            12: #endif
        !            13: extern int doubleclickOK;
        !            14: 
        !            15: /*
        !            16:  * clockroutine() called at video interrupt time.
        !            17:  *     reads chars off the keyboard, sends things to host
        !            18:  */
        !            19: 
        !            20: short          second;
        !            21: short          ticks;
        !            22: extern long    ticks0;
        !            23: extern char    *patchedspot;
        !            24: extern char    patch;
        !            25: extern int     kbdrepeat;
        !            26: #define        CONTROL 1
        !            27: 
        !            28: clockroutine()
        !            29: {
        !            30:        register c;
        !            31:        extern struct Proc *kbdproc;
        !            32:        register struct Proc *p;
        !            33:        register char *upc;     /*SFBOTCH*/
        !            34: 
        !            35:        ticks0++;
        !            36:        if(--ticks<=0){
        !            37:                ticks=60;       /* really HZ */
        !            38:                second=1;
        !            39:        }
        !            40: 
        !            41:        for(p= &proctab[CONTROL+1]; p<&proctab[NPROC]; p++)
        !            42:                if(p->nticks>0 && --p->nticks==0)
        !            43:                        p->state|=WAKEUP|RUN;
        !            44:        setrun(&proctab[CONTROL]);
        !            45:        if((p=kbdproc)==0 && qpeekc(&KBDQUEUE) != 0x8E)
        !            46:                return;
        !            47:        while(KBDQUEUE.c_cc>0){
        !            48:                doubleclickOK=0;
        !            49:                c=qgetc(&KBDQUEUE);
        !            50:                if(c==0x8E){    /* SHIFT-SETUP; show what's up */
        !            51:                        rectf(&display, P->rect, F_XOR);
        !            52:                        do auto4(); while(button123()==0);
        !            53:                        if(button2()){
        !            54:                                /*SFBOTCHchar **/upc=(char *)P->pcb.pc;
        !            55:                                patchedspot=upc;
        !            56:                                patch= *upc;
        !            57:                                *upc=0x14;      /* EXTOP trap */
        !            58:                        }
        !            59:                        rectf(&display, P->rect, F_XOR);
        !            60:                        do auto4(); while(button123());
        !            61:                }else if(c==REBOOTKEY)
        !            62:                        reboot();
        !            63:                else
        !            64:                        qputc(&p->kbdqueue, c);
        !            65:                if(p->state&KBDLOCAL)
        !            66:                        p->state|=WAKEUP;
        !            67:        }
        !            68: #ifndef        BLITKBD
        !            69:        if((kbdrepeat&(RPTHAVECHR|RPTON)) && (ticks&1)==0)
        !            70:                kbdrpt();
        !            71: #endif
        !            72:        givemouse(p);
        !            73: }
        !            74: givemouse(p)
        !            75:        register struct Proc *p;
        !            76: {
        !            77:                register struct Mouse *m;       /*SFBOTCH*/
        !            78:        if((p->state&(MOUSELOCAL|USER)) == (MOUSELOCAL|USER)){
        !            79:                /*SFBOTCHregister struct Mouse * */m= &((struct udata *)p->data)->mouse;
        !            80:                *m=mouse;
        !            81:        }
        !            82: }
        !            83: sleep(s){
        !            84:        register struct Proc *p=P;
        !            85:        register alarmed=p->state&ALARMREQD;
        !            86:        register long nticks;
        !            87:        extern long ticks0;
        !            88:        nticks=ticks0+p->nticks;
        !            89:        alarm(s);
        !            90:        Uwait(ALARM);
        !            91:        /* a little dance because sleep calls alarm */
        !            92:        if(alarmed){
        !            93:                spl1();
        !            94:                if(nticks>ticks0)
        !            95:                        p->nticks=nticks-ticks0;
        !            96:                else    /* we missed his wakeup! */
        !            97:                        p->state|=WAKEUP;
        !            98:                spl0();
        !            99:                p->state|=ALARMREQD;
        !           100:        }else
        !           101:                p->state&=~ALARMREQD;
        !           102: }
        !           103: alarm(s){
        !           104:        P->state|=ALARMREQD;
        !           105:        if(s>0)
        !           106:                P->nticks=s;
        !           107: }

unix.superglobalmegacorp.com

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