V9/jtools/src/sam/sun.c
#include "sam.h"
static char *samterm="xsamterm";
static char *termargv[20]={"xsamterm", 0};
static int targc=1;
sunarg(pargv, pargc)
uchar **pargv[];
int *pargc;
{
switch((*pargv)[1][1]){
case '=': /* X geometry argument */
termargv[targc++]=(char *)((*pargv)[1]+1);
break;
}
termargv[targc]=0;
}
char *memcpy(s1, s2, n)
char *s1;
register char *s2;
register int n;
{
register char *cs1;
cs1=s1;
while(n--)
*cs1++ = *s2++;
return s1;
}
bootterm(zflag)
{
int afildes[2], bfildes[2], pid;
if((pipe(afildes)==-1)||(pipe(bfildes)==-1)){
dprint("sam: can't create pipe to terminal process\n");
return 0;
}
if((pid=fork())==0){
close(0);
dup(afildes[0]);
close(1);
dup(bfildes[1]);
execvp(samterm, termargv);
exit(127);
}
if(pid==-1){
dprint("sam: can't fork samterm\n");
return 0;
}
#ifndef DIST
sleep(3); /* for dbx: allow time for child to get out */
#endif
close(0);
dup(bfildes[0]);
close(1);
dup(afildes[1]);
return 1;
}
/* start the terminal part, then execute sam on remote machine */
connectboot(machine,zflag)
char *machine;
{
bootterm(zflag);
rawmode(1);
execlp("rsh", machine, "exec /usr/jerq/bin/sam -R", 0);
exit(127);
}
/* connectboot means these two aren't called */
connectto(machine)
char *machine;
{ return;
}
join()
{ return;
}