diff --git a/contrib/process.factor b/contrib/process.factor index fce213b3bf..1d63bbe82c 100644 --- a/contrib/process.factor +++ b/contrib/process.factor @@ -1,12 +1,21 @@ IN: process -USING: compiler io io-internals kernel parser ; +USING: compiler io io-internals kernel parser generic ; FUNCTION: int system ( char* command ) ; FUNCTION: void* popen ( char* command, char* type ) ; +FUNCTION: int pclose ( void* file ) ; -: ( command mode -- stream ) - popen dup ; +TUPLE: process-stream pipe ; + +C: process-stream ( command mode -- stream ) + >r popen dup r> + [ set-process-stream-pipe ] keep + >r dup r> + [ set-delegate ] keep ; + +M: process-stream stream-close + process-stream-pipe [ pclose drop ] when* ; : !" parse-string system drop ; parsing