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

1.1     ! root        1: #include <jerq.h>
        !             2: #include <layer.h>
        !             3: #include <jerqproc.h>
        !             4: #include "../msgs.h"
        !             5: 
        !             6: long getlong();
        !             7: 
        !             8: extern Texture cup;
        !             9: 
        !            10: boot(){
        !            11:        register argc;
        !            12:        register char **argv;
        !            13:        register char *address;
        !            14:        char *bootaddress;
        !            15:        char *Ualloc();
        !            16:        register unsigned nbytes, nargchars;
        !            17:        register long i, amtloaded;
        !            18:        int text, data, bss;
        !            19: 
        !            20:        Urequest(MOUSE);
        !            21:        Ucursswitch(&cup);
        !            22:        argc=getlong();
        !            23:        nargchars=getlong();
        !            24:        argv=(char **)Ualloc(nargchars+(argc+1)*sizeof(char *));
        !            25:        if(argv==0)
        !            26:                address==0;
        !            27:        else{
        !            28:                text=getlong();
        !            29:                data=getlong();
        !            30:                bss=getlong();
        !            31:                nbytes=text+data;       /* the amount to be downloaded */
        !            32:                address=Ualloc((unsigned)(nbytes+bss+4));
        !            33:                if (((unsigned)address) & 4)
        !            34:                        address += 4;
        !            35:                bootaddress=address;
        !            36:        }
        !            37:        P->data=address+text;
        !            38:        P->bss=P->data+data;
        !            39:        muxublk(P);
        !            40:        muxmesg((int)(P-proctab), C_PUSHLD);
        !            41:        sendwithdelim(4, &bootaddress);
        !            42:        bldargs(argc, argv);
        !            43: #define Y(a) (P->rect.corner.y-muldiv(P->rect.corner.y-P->rect.origin.y, a, nbytes))
        !            44:        amtloaded=0;
        !            45:        for(i=0; i<nbytes; i++){
        !            46:                *address++=getchar();
        !            47:                if(P->state&(RESHAPED|MOVED)){
        !            48:                        if(!(P->state&MOVED))
        !            49:                                amtloaded=0;
        !            50:                        P->state&=~(RESHAPED|MOVED);
        !            51:                }
        !            52:                if((i&127)==0){
        !            53:                        lrectf(P->layer, Rect(P->rect.origin.x, Y(i),
        !            54:                                P->rect.corner.x, Y(amtloaded)), F_XOR);
        !            55:                        amtloaded=i;
        !            56:                }
        !            57:        }
        !            58:        muxublk(P);
        !            59:        clear(P->rect, 1);
        !            60:        Urequest(0);
        !            61:        P->text=bootaddress;
        !            62:        P->state|=USER;
        !            63:        setdata(P);
        !            64: #define        udp     ((struct udata *)P->data)
        !            65:        udp->argc=argc;
        !            66:        udp->argv=argv; /* these get set as arguments to main in notsolow.o */
        !            67:        if(P->state&ZOMBOOT){
        !            68:                P->state&=~ZOMBOOT;
        !            69:                P->state|=ZOMBIE;
        !            70:                zombexec(P->text);
        !            71:        }
        !            72:        exec(P->text);
        !            73: }
        !            74: bldargs(argc, argv)
        !            75:        register char **argv;
        !            76: {
        !            77:        register i;
        !            78:        register char *p=(char *)(argv+argc+1);
        !            79:        for(i=0; i<argc; i++){
        !            80:                *argv++=p;
        !            81:                do
        !            82:                        *p=getchar();
        !            83:                while(*p++);
        !            84:        }
        !            85:        *argv++=0;
        !            86: }
        !            87: setdata(p)
        !            88:        register struct Proc *p;
        !            89: {
        !            90:        register struct udata *u=((struct udata *)p->data);
        !            91:        u->Drect=p->rect;
        !            92:        u->Jdisplayp=p->layer;
        !            93: }
        !            94: getchar(){
        !            95:        register c;
        !            96:        register struct Proc *p=P;
        !            97: 
        !            98:        while(p->nchars==0){
        !            99:                muxublk(p);
        !           100:                sw(0);
        !           101:        }
        !           102:        c = *(p->cbufpout)++;
        !           103:        if(p->cbufpout >= &p->cbuf[sizeof(p->cbuf)])
        !           104:                p->cbufpout = p->cbuf;
        !           105:        if((--p->nchars)==0)
        !           106:                muxublk(p);     /* shouldn't be necessary, but... */
        !           107:        return c;
        !           108: }
        !           109: 
        !           110: long
        !           111: getlong(){
        !           112:        long l;
        !           113:        register char *p=(char *)&l;
        !           114:        register i;
        !           115:        for(i=0; i<4; i++)
        !           116:                *p++=getchar();
        !           117:        return(l);
        !           118: }
        !           119: 
        !           120: shutdown(p)
        !           121:        register struct Proc *p;
        !           122: {
        !           123:        extern struct Proc *debugger;
        !           124:        extern struct Proc *kbdproc;
        !           125:        Lbox(p->layer);
        !           126:        setborder(p);
        !           127:        if(debugger==p)
        !           128:                debugger=0;
        !           129:        muxublk(p);
        !           130:        p->state&=~(KBDLOCAL|MOUSELOCAL|GOTMOUSE|USER);
        !           131:        p->nticks=0;
        !           132:        p->inhibited=0;
        !           133:        qclear(&p->kbdqueue);
        !           134:        if((p->state&ZOMBIE)==0)
        !           135:                freemem(p);
        !           136: }
        !           137: freemem(p)
        !           138:        register struct Proc *p;
        !           139: {
        !           140:        extern int end;
        !           141:        extern int windowstart();
        !           142:        freeall((char *)p);
        !           143:        clearname(p);
        !           144: }

unix.superglobalmegacorp.com

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