Updating windows launcher for new-slots
parent
62568770a9
commit
c9c7548ffd
|
@ -5,7 +5,7 @@ io.windows io.windows.nt.pipes libc io.nonblocking
|
||||||
io.streams.duplex windows.types math windows.kernel32 windows
|
io.streams.duplex windows.types math windows.kernel32 windows
|
||||||
namespaces io.launcher kernel sequences windows.errors assocs
|
namespaces io.launcher kernel sequences windows.errors assocs
|
||||||
splitting system threads init strings combinators
|
splitting system threads init strings combinators
|
||||||
io.backend ;
|
io.backend new-slots accessors ;
|
||||||
IN: io.windows.launcher
|
IN: io.windows.launcher
|
||||||
|
|
||||||
TUPLE: CreateProcess-args
|
TUPLE: CreateProcess-args
|
||||||
|
@ -22,30 +22,25 @@ TUPLE: CreateProcess-args
|
||||||
stdout-pipe stdin-pipe ;
|
stdout-pipe stdin-pipe ;
|
||||||
|
|
||||||
: default-CreateProcess-args ( -- obj )
|
: default-CreateProcess-args ( -- obj )
|
||||||
0
|
CreateProcess-args construct-empty
|
||||||
|
0 >>dwCreateFlags
|
||||||
"STARTUPINFO" <c-object>
|
"STARTUPINFO" <c-object>
|
||||||
"STARTUPINFO" heap-size over set-STARTUPINFO-cb
|
"STARTUPINFO" heap-size over set-STARTUPINFO-cb >>lpStartupInfo
|
||||||
"PROCESS_INFORMATION" <c-object>
|
"PROCESS_INFORMATION" <c-object> >>lpProcessInformation
|
||||||
TRUE
|
TRUE >>bInheritHandles ;
|
||||||
{
|
|
||||||
set-CreateProcess-args-dwCreateFlags
|
|
||||||
set-CreateProcess-args-lpStartupInfo
|
|
||||||
set-CreateProcess-args-lpProcessInformation
|
|
||||||
set-CreateProcess-args-bInheritHandles
|
|
||||||
} \ CreateProcess-args construct ;
|
|
||||||
|
|
||||||
: call-CreateProcess ( CreateProcess-args -- )
|
: call-CreateProcess ( CreateProcess-args -- )
|
||||||
{
|
{
|
||||||
CreateProcess-args-lpApplicationName
|
lpApplicationName>>
|
||||||
CreateProcess-args-lpCommandLine
|
lpCommandLine>>
|
||||||
CreateProcess-args-lpProcessAttributes
|
lpProcessAttributes>>
|
||||||
CreateProcess-args-lpThreadAttributes
|
lpThreadAttributes>>
|
||||||
CreateProcess-args-bInheritHandles
|
bInheritHandles>>
|
||||||
CreateProcess-args-dwCreateFlags
|
dwCreateFlags>>
|
||||||
CreateProcess-args-lpEnvironment
|
lpEnvironment>>
|
||||||
CreateProcess-args-lpCurrentDirectory
|
lpCurrentDirectory>>
|
||||||
CreateProcess-args-lpStartupInfo
|
lpStartupInfo>>
|
||||||
CreateProcess-args-lpProcessInformation
|
lpProcessInformation>>
|
||||||
} get-slots CreateProcess win32-error=0/f ;
|
} get-slots CreateProcess win32-error=0/f ;
|
||||||
|
|
||||||
: escape-argument ( str -- newstr )
|
: escape-argument ( str -- newstr )
|
||||||
|
@ -54,54 +49,55 @@ TUPLE: CreateProcess-args
|
||||||
: join-arguments ( args -- cmd-line )
|
: join-arguments ( args -- cmd-line )
|
||||||
[ escape-argument ] map " " join ;
|
[ escape-argument ] map " " join ;
|
||||||
|
|
||||||
: app-name/cmd-line ( -- app-name cmd-line )
|
: app-name/cmd-line ( process -- app-name cmd-line )
|
||||||
+command+ get [
|
command>> dup string? [
|
||||||
" " split1
|
" " split1
|
||||||
] [
|
] [
|
||||||
+arguments+ get unclip swap join-arguments
|
unclip swap join-arguments
|
||||||
] if* ;
|
] if ;
|
||||||
|
|
||||||
: cmd-line ( -- cmd-line )
|
: cmd-line ( process -- cmd-line )
|
||||||
+command+ get [ +arguments+ get join-arguments ] unless* ;
|
command>> dup string? [ join-arguments ] unless ;
|
||||||
|
|
||||||
: fill-lpApplicationName
|
: fill-lpApplicationName ( process args -- process args )
|
||||||
app-name/cmd-line
|
over app-name/cmd-line
|
||||||
pick set-CreateProcess-args-lpCommandLine
|
>r >>lpApplicationName
|
||||||
over set-CreateProcess-args-lpApplicationName ;
|
r> >>lpCommandLine ;
|
||||||
|
|
||||||
: fill-lpCommandLine
|
: fill-lpCommandLine ( process args -- process args )
|
||||||
cmd-line over set-CreateProcess-args-lpCommandLine ;
|
over cmd-line >>lpCommandLine ;
|
||||||
|
|
||||||
: fill-dwCreateFlags
|
: fill-dwCreateFlags ( process args -- process args )
|
||||||
0
|
0
|
||||||
pass-environment? [ CREATE_UNICODE_ENVIRONMENT bitor ] when
|
over pass-environment? [ CREATE_UNICODE_ENVIRONMENT bitor ] when
|
||||||
+detached+ get winnt? and [ DETACHED_PROCESS bitor ] when
|
over detached>> winnt? and [ DETACHED_PROCESS bitor ] when
|
||||||
over set-CreateProcess-args-dwCreateFlags ;
|
>>dwCreateFlags ;
|
||||||
|
|
||||||
: fill-lpEnvironment
|
: fill-lpEnvironment ( process args -- process args )
|
||||||
pass-environment? [
|
over pass-environment? [
|
||||||
[
|
[
|
||||||
get-environment
|
over get-environment
|
||||||
[ "=" swap 3append string>u16-alien % ] assoc-each
|
[ "=" swap 3append string>u16-alien % ] assoc-each
|
||||||
"\0" %
|
"\0" %
|
||||||
] { } make >c-ushort-array
|
] { } make >c-ushort-array
|
||||||
over set-CreateProcess-args-lpEnvironment
|
>>lpEnvironment
|
||||||
] when ;
|
] when ;
|
||||||
|
|
||||||
: fill-startup-info
|
: fill-startup-info ( process args -- process args )
|
||||||
dup CreateProcess-args-lpStartupInfo
|
dup lpStartupInfo>>
|
||||||
STARTF_USESTDHANDLES swap set-STARTUPINFO-dwFlags ;
|
STARTF_USESTDHANDLES swap set-STARTUPINFO-dwFlags ;
|
||||||
|
|
||||||
HOOK: fill-redirection io-backend ( args -- args )
|
HOOK: fill-redirection io-backend ( process args -- process args )
|
||||||
|
|
||||||
M: windows-ce-io fill-redirection ;
|
M: windows-ce-io fill-redirection ;
|
||||||
|
|
||||||
: make-CreateProcess-args ( -- args )
|
: make-CreateProcess-args ( process -- args )
|
||||||
default-CreateProcess-args
|
default-CreateProcess-args
|
||||||
wince? [ fill-lpApplicationName ] [ fill-lpCommandLine ] if
|
wince? [ fill-lpApplicationName ] [ fill-lpCommandLine ] if
|
||||||
fill-dwCreateFlags
|
fill-dwCreateFlags
|
||||||
fill-lpEnvironment
|
fill-lpEnvironment
|
||||||
fill-startup-info ;
|
fill-startup-info
|
||||||
|
nip ;
|
||||||
|
|
||||||
M: windows-io current-process-handle ( -- handle )
|
M: windows-io current-process-handle ( -- handle )
|
||||||
GetCurrentProcessId ;
|
GetCurrentProcessId ;
|
||||||
|
@ -112,7 +108,7 @@ M: windows-io run-process* ( desc -- handle )
|
||||||
make-CreateProcess-args
|
make-CreateProcess-args
|
||||||
fill-redirection
|
fill-redirection
|
||||||
dup call-CreateProcess
|
dup call-CreateProcess
|
||||||
CreateProcess-args-lpProcessInformation <process>
|
CreateProcess-args-lpProcessInformation
|
||||||
] with-descriptor
|
] with-descriptor
|
||||||
] with-destructors ;
|
] with-destructors ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue