/* smallest shell */ a,b[99],*c,d[99];main(){while(printf(">"),c=d,*c=a=gets(b)){ for(;*++c=strtok(a," ");a=0);fork()?wait(0):execvp(*d,d+1);}} ------------------------------------------------------------------- #define D ,close( char *c,q [512 ],m[ 256 ],*v[ 99], **u, *i[3];int f[2],p;main (){for (m[m [60]= m[62 ]=32 ]=m[* m=124 [m]= 9]=6; e(-8) ,gets (1+( c=q) )|| exit (0); r(0,0) )for( ;*++ c;); }r(t, o){ *i=i [2]= 0;for (u=v +98 ;m[*--c] ^9;m [*c] &32 ?i[*c &2]= *u,u- v^98 &&++u: 3 )if(!m[*c]){for(*++c=0;!m[*--c];); * --u= ++c;}u-v^98?strcmp(*u,"cd")?*c?pipe(f),o=f[ 1 ]: 4 ,(p=fork())?e(p),o?r(o,0)D o)D*f): 1 ,wait(0):(o?dup2(*f,0)D*f)D o):*i? 5 D 0),e(open(*i,0)): 9 ,t?dup2(t,1)D t):i[ 2 ]? 6 D 1),e(creat(i[2],438)): 5 ,e(execvp(*u,u))):e(chdir(u[1])*2): 3 ;}e(x){x<0?write(2,"?\n$ "-x/4,2),x+1||exit(1): 5 ;} /* by bsh20858@news.fhda.edu (Brian S Hiles) */