Annotation of researchv10no/cmd/2500/remote.c, revision 1.1

1.1     ! root        1: #include       <fio.h>
        !             2: #include       "hdr.h"
        !             3: 
        !             4: #define                RELAY           "/v/bin/2500relay"
        !             5: 
        !             6: static int frameno;
        !             7: static int ifd, ofd;
        !             8: static spawn(char *sys, char *relay, char *prog, int *i, int *o);
        !             9: 
        !            10: remsetup(char *system, char *prog, char *relay)
        !            11: {
        !            12:        if(relay == 0)
        !            13:                relay = RELAY;
        !            14:        if(spawn(system, relay, prog,  &ifd, &ofd))
        !            15:                exit(1);
        !            16:        Finit(ofd, (char *)0);
        !            17: }
        !            18: 
        !            19: remsframe(char *str)
        !            20: {
        !            21:        char *s;
        !            22: 
        !            23:        fprint(ifd, "%s\n", str);
        !            24:        if(s = Frdline(ofd)){
        !            25:                if(*s)
        !            26:                        fprint(2, "[remote] %s\n", s);
        !            27:        } else {
        !            28:                perror("remote died");
        !            29:                exit(1);
        !            30:        }
        !            31: }
        !            32: 
        !            33: remiframe(int fr)
        !            34: {
        !            35:        char buf[64];
        !            36: 
        !            37:        if(fr >= 0)
        !            38:                frameno = fr;
        !            39:        sprint(buf, "%d", frameno);
        !            40:        frameno++;
        !            41:        remsframe(buf);
        !            42: }
        !            43: 
        !            44: shoot(int start, int nframes, int snapc)
        !            45: {
        !            46:        int n = nframes;
        !            47:        frameno = start;
        !            48:        print("shooting frames %d..%d\n", start, start+nframes-1);
        !            49:        while(nframes-- > 0){
        !            50:                remiframe(-1);
        !            51:                snap(snapc);
        !            52:        }
        !            53:        print("shot %d frames\n", n);
        !            54: }
        !            55: 
        !            56: static
        !            57: spawn(char *sys, char *relay, char *prog, int *i, int *o)
        !            58: {
        !            59:        int toremote[2], fromremote[2];
        !            60:        int n;
        !            61: 
        !            62:        if((pipe(toremote) < 0) || (pipe(fromremote) < 0)){
        !            63:                perror("pipe");
        !            64:                return(1);
        !            65:        }
        !            66:        if((n = fork()) < 0){
        !            67:                perror("fork");
        !            68:                return(1);
        !            69:        }
        !            70:        if(n){  /* parent */
        !            71:                *i = toremote[1];
        !            72:                close(toremote[0]);
        !            73:                *o = fromremote[0];
        !            74:                close(fromremote[1]);
        !            75:                remsframe(prog);
        !            76:        } else {
        !            77:                char buf[256];
        !            78: 
        !            79:                close(logfd);
        !            80:                dup2(toremote[0], 0);
        !            81:                dup2(fromremote[1], 1);
        !            82:                close(toremote[0]);
        !            83:                close(toremote[1]);
        !            84:                close(fromremote[0]);
        !            85:                close(fromremote[1]);
        !            86:                sprint(buf, "rsh %s '%s'", sys, relay);
        !            87:                system(buf);
        !            88:                sleep(5);
        !            89:                exit(1);
        !            90:        }
        !            91:        return(0);
        !            92: }

unix.superglobalmegacorp.com

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