// Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved\r
// \r
// Author: Jim Richardson, develop@wtfo-guru.com\r
+// Dan Lewis (dihlewis@yahoo.co.uk)\r
// Created: Saturday, August 11, 2001 \r
//\r
//------------------------------------------------------------------------------\r
\r
using System;\r
using System.IO;\r
-using System.Diagnostics;\r
+//using System.Diagnostics;\r
using System.Collections;\r
using System.Security;\r
-using System.PAL;\r
using System.Security.Permissions;\r
-using System.Runtime.InteropServices;\r
+using System.Runtime.CompilerServices;\r
\r
namespace System\r
{\r
public sealed class Environment\r
{\r
- private static OpSys _os = Platform.OS;\r
+ private Environment () {}\r
\r
- //[MonoTODO]\r
+ [MonoTODO]\r
public enum SpecialFolder\r
{ // TODO: Determine if these windoze style folder identifiers \r
// have unix/linux counterparts\r
- ApplicationData,\r
- CommonApplicationData,\r
- CommonProgramFiles,\r
- Cookies,\r
- DesktopDirectory,\r
- Favorites,\r
- History,\r
- InternetCache,\r
- LocalApplicationData,\r
- Personal,\r
- ProgramFiles,\r
- Programs,\r
- Recent,\r
- SendTo,\r
- StartMenu,\r
- Startup,\r
- System,\r
- Templates\r
+ Programs = 0x02,\r
+ Personal = 0x05,\r
+ Favorites = 0x06,\r
+ Startup = 0x07,\r
+ Recent = 0x08,\r
+ SendTo = 0x09,\r
+ StartMenu = 0x0b,\r
+ DesktopDirectory = 0x10,\r
+ Templates = 0x15,\r
+ ApplicationData = 0x1a,\r
+ LocalApplicationData = 0x1c,\r
+ InternetCache = 0x20,\r
+ Cookies = 0x21,\r
+ History = 0x22,\r
+ CommonApplicationData = 0x23,\r
+ System = 0x25,\r
+ ProgramFiles = 0x26,\r
+ CommonProgramFiles = 0x2b,\r
}\r
\r
// TODO: Make sure the security attributes do what I expect\r
/// <summary>\r
/// Gets the command line for this process\r
/// </summary>\r
- //[MonoTODO]\r
public static string CommandLine\r
{ // TODO: Coordinate with implementor of EnvironmentPermissionAttribute\r
- [EnvironmentPermissionAttribute(SecurityAction.Demand, Read = "COMMANDLINE")]\r
+ // [EnvironmentPermissionAttribute(SecurityAction.Demand, Read = "COMMANDLINE")]\r
get\r
{\r
- return _os.CommandLine;\r
+ // FIXME: we may need to quote, but any sane person\r
+ // should use GetCommandLineArgs () instead.\r
+ return String.Join (" ", GetCommandLineArgs ());\r
}\r
}\r
\r
// the directory class however that class has additional security requirements\r
// so the Directory class will call this class for its get/set current directory\r
\r
- [EnvironmentPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]\r
+ // [EnvironmentPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]\r
get\r
{\r
- return _os.GetCurrentDirectory();\r
+ return MonoIO.GetCurrentDirectory ();\r
}\r
- [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]\r
+ [MonoTODO("disabled because of compile error. Need mcs magic.")]\r
+ //[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]\r
set\r
{\r
- _os.SetCurrentDirectory(value);\r
+ MonoIO.SetCurrentDirectory (value);\r
}\r
}\r
\r
/// <summary>\r
/// Gets or sets the exit code of this process\r
/// </summary>\r
- //[MonoTODO]\r
+ [MonoTODO]\r
public static int ExitCode\r
{ // TODO: find a way to implement this property\r
get\r
/// <summary>\r
/// Gets the name of the local computer\r
/// </summary>\r
- public static string MachineName\r
- {\r
- get\r
- {\r
- return _os.MachineName;\r
- }\r
+ public extern static string MachineName {\r
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]\r
+ get;\r
}\r
\r
/// <summary>\r
/// Gets the standard new line value\r
/// </summary>\r
- public static string NewLine\r
- {\r
- get\r
- {\r
- return _os.NewLineSequence;\r
- }\r
+ public extern static string NewLine {\r
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]\r
+ get;\r
}\r
\r
/// <summary>\r
/// Gets the current OS version information\r
/// </summary>\r
- public static OperatingSystem OSVersion\r
- {\r
+ [MonoTODO]\r
+ public static OperatingSystem OSVersion {\r
get\r
{\r
- return _os.OSVersion;\r
+ return null;\r
}\r
}\r
\r
/// <summary>\r
/// Get StackTrace\r
/// </summary>\r
- public static string StackTrace\r
- {\r
- get\r
- {\r
- return null;\r
+ public static string StackTrace {\r
+ get {\r
+ try {\r
+ throw new Exception ();\r
+ } catch (Exception e) {\r
+ return e.StackTrace;\r
+ }\r
}\r
}\r
\r
/// <summary>\r
/// Get the number of milliseconds that have elapsed since the system was booted\r
/// </summary>\r
- public static int TickCount\r
- {\r
- get\r
- {\r
- return 0;\r
- //return getTickCount();\r
- }\r
+ public extern static int TickCount {\r
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]\r
+ get;\r
}\r
\r
/// <summary>\r
/// Get UserDomainName\r
/// </summary>\r
- public static string UserDomainName\r
- {\r
- get\r
- {\r
- return null;\r
+ [MonoTODO]\r
+ public static string UserDomainName {\r
+ get {\r
+ return MachineName;\r
}\r
}\r
\r
/// <summary>\r
/// Gets a flag indicating whether the process is in interactive mode\r
/// </summary>\r
+ [MonoTODO]\r
public static bool UserInteractive\r
{\r
get\r
/// <summary>\r
/// Get the user name of current process is running under\r
/// </summary>\r
- //[MonoTODO]\r
+ [MonoTODO]\r
public static string UserName\r
{\r
get\r
}\r
\r
/// <summary>\r
- /// Get the version of an assembly\r
+ /// Get the version of the common language runtime \r
/// </summary>\r
- public static Version Version\r
- {\r
- get\r
- {\r
- return null;\r
+ [MonoTODO]\r
+ public static Version Version {\r
+ get {\r
+ return new Version();\r
}\r
}\r
\r
/// <summary>\r
/// Get the amount of physical memory mapped to process\r
/// </summary>\r
+ [MonoTODO]\r
public static long WorkingSet\r
{\r
get\r
}\r
}\r
\r
- public static void Exit(int exitCode)\r
- { \r
- }\r
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]\r
+ public extern static void Exit(int exitCode);\r
\r
/// <summary>\r
/// Substitute environment variables in the argument "name"\r
/// </summary>\r
+ [MonoTODO]\r
public static string ExpandEnvironmentVariables(string name)\r
{\r
return name;\r
/// <summary>\r
/// Return an array of the command line arguments of the current process\r
/// </summary>\r
- public static string[] GetCommandLineArgs()\r
- {\r
- char[] delimiter = new char[1];\r
- delimiter[0] = ' ';\r
- return _os.CommandLine.Split(delimiter);\r
- }\r
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]\r
+ public extern static string[] GetCommandLineArgs();\r
\r
/// <summary>\r
/// Return a string containing the value of the environment\r
/// variable identifed by parameter "variable"\r
/// </summary>\r
- public static string GetEnvironmentVariable(string variable)\r
- {\r
- return _os.GetEnvironmentVariable(variable);\r
- }\r
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]\r
+ public extern static string GetEnvironmentVariable (string name);\r
\r
/// <summary>\r
/// Return a set of all environment variables and their values\r
\r
public static IDictionary GetEnvironmentVariables()\r
{\r
- return _os.EnvironmentVariables;\r
+ Hashtable vars = new Hashtable ();\r
+ foreach (string name in GetEnvironmentVariableNames ())\r
+ vars [name] = GetEnvironmentVariable (name);\r
+ \r
+ return vars;\r
}\r
\r
/// <summary>\r
/// Returns the fully qualified path of the\r
/// folder specified by the "folder" parameter\r
/// </summary>\r
+ [MonoTODO]\r
public static string GetFolderPath(SpecialFolder folder)\r
{\r
return null;\r
/// <summary>\r
/// Returns an array of the logical drives\r
/// </summary>\r
+ [MonoTODO]\r
public static string[] GetLogicalDrives()\r
{\r
return null;\r
}\r
\r
+ // private methods\r
+\r
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]\r
+ private extern static string [] GetEnvironmentVariableNames ();\r
+\r
}\r
}\r