2008-10-18 22:20:13 -04:00
|
|
|
! Copyright (C) 2008 Doug Coleman.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2008-12-09 04:22:38 -05:00
|
|
|
USING: alien.strings fry io.encodings.utf16n kernel
|
2009-09-17 23:07:21 -04:00
|
|
|
splitting windows windows.kernel32 windows.types system
|
|
|
|
environment alien.data sequences windows.errors
|
2009-09-18 11:01:38 -04:00
|
|
|
io.streams.memory io.encodings io specialized-arrays ;
|
2009-09-17 23:07:21 -04:00
|
|
|
SPECIALIZED-ARRAY: TCHAR
|
2011-09-18 21:25:06 -04:00
|
|
|
IN: environment.windows
|
2008-10-18 22:20:13 -04:00
|
|
|
|
2011-09-18 21:25:06 -04:00
|
|
|
M: windows os-env ( key -- value )
|
2009-09-17 23:07:21 -04:00
|
|
|
MAX_UNICODE_PATH TCHAR <c-array>
|
2008-10-19 00:03:22 -04:00
|
|
|
[ dup length GetEnvironmentVariable ] keep over 0 = [
|
2008-10-18 22:20:13 -04:00
|
|
|
2drop f
|
|
|
|
] [
|
2012-06-21 11:32:53 -04:00
|
|
|
nip alien>native-string
|
2008-10-18 22:20:13 -04:00
|
|
|
] if ;
|
|
|
|
|
2011-09-18 21:25:06 -04:00
|
|
|
M: windows set-os-env ( value key -- )
|
2008-10-18 22:20:13 -04:00
|
|
|
swap SetEnvironmentVariable win32-error=0/f ;
|
|
|
|
|
2011-09-18 21:25:06 -04:00
|
|
|
M: windows unset-os-env ( key -- )
|
2008-10-18 22:20:13 -04:00
|
|
|
f SetEnvironmentVariable 0 = [
|
|
|
|
GetLastError ERROR_ENVVAR_NOT_FOUND =
|
|
|
|
[ win32-error ] unless
|
|
|
|
] when ;
|
|
|
|
|
2011-09-18 21:25:06 -04:00
|
|
|
M: windows (os-envs) ( -- seq )
|
2008-10-19 00:03:22 -04:00
|
|
|
GetEnvironmentStrings [
|
2012-06-18 20:24:21 -04:00
|
|
|
[
|
2008-10-19 00:03:22 -04:00
|
|
|
utf16n decode-input
|
2009-02-28 16:31:34 -05:00
|
|
|
[ "\0" read-until drop dup empty? not ] [ ] produce nip
|
2012-06-18 20:24:21 -04:00
|
|
|
] with-memory-reader
|
2008-10-19 00:03:22 -04:00
|
|
|
] [ FreeEnvironmentStrings win32-error=0/f ] bi ;
|