K _0m(K a) { I t=a->t; P(4!=t && 3!=ABS(t), TE) I b=0,s=0; S v=0; K z=0; S m; if(3==ABS(t))m=CSK(a); struct stat sb; I ff=0; if(3==ABS(t) && strcmp(m,"/dev/fd/0") && strcmp(m,"/dev/stdin") ){ if(stat(m,&sb)==-1)R FE; if((sb.st_mode & S_IFMT)==S_IFIFO)ff=1;} if(ff){ //read FIFO I fn,i,j; C buf[256]; z=newK(0,0); fn= open(m, O_RDONLY); while (read(fn,&buf,256)>0) { j=256; K y=0; for(i=0;i<256;i++){ if(i>j){buf[j]='\0'; break;} if(buf[i]=='\r'||buf[i]=='\n')j=i; } I n=strlen(buf); y=newK(n<2?3:-3,n); memcpy(kC(y),&buf,n); kap(&z,&y); cd(y); } GC; } else if( 4==t && !**kS(a) ){ char ss[300]; S adr=fgets(ss,sizeof(ss),stdin); if(adr==NULL)R newK(6,1); //read stdin 0:` I i,j; for(i=0;i<300;++i){if(ss[i]=='\012')break;} I k=0; for(j=0;j<=i;j++){if(ss[j]!='\004')ss[k++]=ss[j];} z=newK(-3,k-1); for(j=0;j<k-1;++j){kC(z)[j]=ss[j];} GC; } else if( (3==ABS(t) && (!strcmp(m,"/dev/fd/0") || !strcmp(m,"/dev/stdin"))) //read stdin || 4==t && (!strcmp(*kS(a),"/dev/fd/0") || !strcmp(*kS(a),"/dev/stdin")) ){ b=getdelim_(&v,&s,EOF,stdin); P(freopen_stdin() == NULL, FE) if(b==-1){z=newK(0,0); GC;} }
K _0m(K a) { I t=a->t; P(4!=t && 3!=ABS(t), TE) I b=0,s=0; S v=0; K z; if(4==t && !**kS(a)){ b=getdelim_(&v,&s,EOF,stdin); P(freopen_stdin() == NULL, FE) if(b==-1){z=newK(0,0); GC;} }