63 lines
1.6 KiB
Factor
Executable File
63 lines
1.6 KiB
Factor
Executable File
! Copyright (C) 2007 Slava Pestov.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: io.backend system kernel namespaces strings hashtables
|
|
sequences assocs combinators ;
|
|
IN: io.launcher
|
|
|
|
SYMBOL: +command+
|
|
SYMBOL: +arguments+
|
|
SYMBOL: +detached+
|
|
SYMBOL: +environment+
|
|
SYMBOL: +environment-mode+
|
|
|
|
SYMBOL: prepend-environment
|
|
SYMBOL: replace-environment
|
|
SYMBOL: append-environment
|
|
|
|
: default-descriptor
|
|
H{
|
|
{ +command+ f }
|
|
{ +arguments+ f }
|
|
{ +detached+ f }
|
|
{ +environment+ H{ } }
|
|
{ +environment-mode+ append-environment }
|
|
} ;
|
|
|
|
: with-descriptor ( desc quot -- )
|
|
default-descriptor [ >r clone r> bind ] bind ; inline
|
|
|
|
: pass-environment? ( -- ? )
|
|
+environment+ get assoc-empty? not
|
|
+environment-mode+ get replace-environment eq? or ;
|
|
|
|
: get-environment ( -- env )
|
|
+environment+ get
|
|
+environment-mode+ get {
|
|
{ prepend-environment [ os-envs union ] }
|
|
{ append-environment [ os-envs swap union ] }
|
|
{ replace-environment [ ] }
|
|
} case ;
|
|
|
|
GENERIC: >descriptor ( obj -- desc )
|
|
|
|
M: string >descriptor +command+ associate ;
|
|
M: sequence >descriptor +arguments+ associate ;
|
|
M: assoc >descriptor ;
|
|
|
|
HOOK: run-process* io-backend ( desc -- )
|
|
|
|
: run-process ( obj -- )
|
|
>descriptor run-process* ;
|
|
|
|
: run-detached ( obj -- )
|
|
>descriptor H{ { +detached+ t } } union run-process* ;
|
|
|
|
HOOK: process-stream* io-backend ( desc -- stream )
|
|
|
|
: <process-stream> ( obj -- stream )
|
|
>descriptor process-stream* ;
|
|
|
|
USE-IF: unix? io.unix.launcher
|
|
USE-IF: windows? io.windows.launcher
|
|
USE-IF: winnt? io.windows.nt.launcher
|