|
|
1.1 ! root 1: #include "sam.h" ! 2: ! 3: static char *samterm="xsamterm"; ! 4: static char *termargv[20]={"xsamterm", 0}; ! 5: static int targc=1; ! 6: ! 7: sunarg(pargv, pargc) ! 8: uchar **pargv[]; ! 9: int *pargc; ! 10: { ! 11: switch((*pargv)[1][1]){ ! 12: case '=': /* X geometry argument */ ! 13: termargv[targc++]=(char *)((*pargv)[1]+1); ! 14: break; ! 15: } ! 16: termargv[targc]=0; ! 17: } ! 18: char *memcpy(s1, s2, n) ! 19: char *s1; ! 20: register char *s2; ! 21: register int n; ! 22: { ! 23: register char *cs1; ! 24: cs1=s1; ! 25: while(n--) ! 26: *cs1++ = *s2++; ! 27: return s1; ! 28: } ! 29: bootterm(zflag) ! 30: { ! 31: int afildes[2], bfildes[2], pid; ! 32: if((pipe(afildes)==-1)||(pipe(bfildes)==-1)){ ! 33: dprint("sam: can't create pipe to terminal process\n"); ! 34: return 0; ! 35: } ! 36: if((pid=fork())==0){ ! 37: close(0); ! 38: dup(afildes[0]); ! 39: close(1); ! 40: dup(bfildes[1]); ! 41: execvp(samterm, termargv); ! 42: exit(127); ! 43: } ! 44: if(pid==-1){ ! 45: dprint("sam: can't fork samterm\n"); ! 46: return 0; ! 47: } ! 48: #ifndef DIST ! 49: sleep(3); /* for dbx: allow time for child to get out */ ! 50: #endif ! 51: close(0); ! 52: dup(bfildes[0]); ! 53: close(1); ! 54: dup(afildes[1]); ! 55: return 1; ! 56: } ! 57: ! 58: /* start the terminal part, then execute sam on remote machine */ ! 59: connectboot(machine,zflag) ! 60: char *machine; ! 61: { ! 62: bootterm(zflag); ! 63: rawmode(1); ! 64: execlp("rsh", machine, "exec /usr/jerq/bin/sam -R", 0); ! 65: exit(127); ! 66: } ! 67: ! 68: /* connectboot means these two aren't called */ ! 69: connectto(machine) ! 70: char *machine; ! 71: { return; ! 72: } ! 73: ! 74: join() ! 75: { return; ! 76: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.