OsProcessEnvironment
Provides abstraction for cross-platform process environment (i.e. environment variables). Exposes a limited <KeyedCollection> interface for accessing, adding, removing env variables
Startup Environment On Startup, the environment is cached and can be accessed with [OsProcessEnvironment startUpEnvironment]
Current Environment You can request the current environment (lazily cached) with [OsProcessEnvironment current]. The current environment is special in that changes to it will be reflected in the underlying OS
New Environment Environments can be created simply with [OsProcessEnvironment new] and passed to new spawned processes
Class Methods
current
  Answer the current environment for Smalltalk.
     This is equivalent to typing 'set' at a Windows shell prompt.

     Answers:
        <OsProcessEnvironment>
new
  Answer a new instance of the receiver. The new environment is empty.

     Answers:
        <OsProcessEnvironment>
startUpEnvironment
  Answer the startUp environment for the user process. This
     provides a snapshot of the environment that Smalltalk
     was run from.

     Answers:
        <OsProcessEnvironment>
Instance Methods
asKeyedCollection
  Answer the environment as keys and values in a keyed collection.
     The keys and values are encoded using the current code page.

     Answers
        <KeyedCollection>
asUtf8KeyedCollection
  Answer the environment values in the receiver.

     Answers
        <Collection>
at:
  Answer the environment value at key @aKey
     If an equivalent key is not found, then answer nil

     Arguments:
        aKey - <String> code page encoded env key
     Answers:
        <String> code page encoded env value
        <UndefinedObject> if absent key, then answer nil
at:ifAbsent:
  Answer the environment value at key @aKey
     If an equivalent key is not found, then answer the result
     of evaluating the zero argument block, aBlock.

     Fail if the key is not found and aBlock is not a zero-argument Block.

     NOTE: aKey is expected to be encoded using the current code page.
     Internally it will be stored in UTF-8 format.
     Use the utf8* APIs to work more directly with UTF-8 bytes

     Arguments:
        aKey - <String | ByteArray> code page encoded env key
        aBlock - <Block> 0-arg block
     Answers:
        <String | ByteArray> code page encoded env value
        <Object> if absent key, then answer the result of @aBlock evaluation
at:put:
  Answer the value currently associated with aKey (or nil if absent),
     after associating the argument aValue with the
     argument aKey, in the receiver.  
     If the receiver does not
     contain a key equivalent to the argument aKey, then create a new entry
     in the receiver for that key.
     If @aValue is nil, then remove the environment variable entry

     NOTE: If the receiver is the Current environement, then push this change
     out to the operating system also

     Arguments:
        aKey - <String | ByteArray>
        aValue - <String | ByteArray> or nil if removing the entry
     Asnwers:
        <String | ByteArray> or nil if there was no old value
includesKey:
  Answer a <Boolean> which is true if the the environment variable is present,
     false otherwise

     Arguments:
        aKey - <String> code page encoded
     Asnwers:
        <Boolean>
keys
  Answer the environment keys in the receiver.
     The keys are encoded using the current code page.

     Answers
        <Collection>
removeKey:
  Answer the value currently associated with aKey (or nil if absent),
     after removing the key @aKey
     If the receiver does not contain a key equivalent to the argument aKey, then create a new entry

     NOTE: If the receiver is the Current environement, then push this change
     out to the operating system also.  It will be in UTF-8 format in the OS

     Arguments:
        aKey - <String> code page encoded
     Asnwers:
        <String> code page encoded str or nil if there was no old value
utf8At:
  Answer the UTF-8 environment value at UTF-8 key @aUtf8Key
     If an equivalent key is not found, then answer nil

     Arguments:
        aUtf8Key - <String | ByteArray> env key
     Answers:
        <String | ByteArray> env value
        <Object> if absent key, then answer the result of @aBlock evaluation
utf8At:ifAbsent:
  Answer the UTF-8 environment value at UTF-8 key @aUtf8Key
     If an equivalent key is not found, then answer the result
     of evaluating the zero argument block, aBlock.

     Fail if the key is not found and aBlock is not a zero-argument Block.

     Arguments:
        aUtf8Key - <String | ByteArray> env key
        aBlock - <Block> 0-arg block
     Answers:
        <String | ByteArray> env value
        <Object> if absent key, then answer the result of @aBlock evaluation
utf8At:put:
  Answer the value currently associated with the UTF-8 @aUtf8Key (or nil if absent),
     after associating the UTF-8 argument @aUtf8Value with the
     aUtf8Key, in the receiver.  
     If the receiver does not
     contain a key equivalent to the argument aUtf8Key, then create a new entry
     in the receiver for that key.
     If @aUtf8Value is nil, then remove the environment variable entry

     NOTE: If the receiver is the Current environment, then push this change
     out to the operating system also

     Arguments:
        aKey - <String | ByteArray>
        aValue - <String ByteArray> or nil if removing the entry
     Asnwers:
        <String | ByteArray> or nil if there was no old value
utf8IncludesKey:
  Answer a <Boolean> which is true if the the environment variable is present,
     false otherwise

     Arguments:
        aKey - <String>
     Asnwers:
        <Boolean>
utf8Keys
  Answer the environment keys in the receiver.

     Answers
        <Collection>
utf8RemoveKey:
  Answer the value currently associated with aKey (or nil if absent),
     after removing the key @aKey
     If the receiver does not contain a key equivalent to the argument aKey, then create a new entry

     NOTE: If the receiver is the Current environement, then push this change
     out to the operating system also

     Arguments:
        aKey - <String>
     Asnwers:
        <String> or nil if there was no old value
utf8Values
  Answer the environment values in the receiver.

     Answers
        <Collection>
values
  Answer the environment values in the receiver.
     The keys are encoded using the current code page.

     Answers
        <Collection>
Last modified date: 02/23/2021