// 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.Collections;\r
+using System.Security;\r
+using System.Security.Permissions;\r
+using System.Runtime.CompilerServices;\r
\r
namespace System\r
{\r
public sealed class Environment\r
{\r
+ private Environment () {}
+
+ [MonoTODO]\r
public enum SpecialFolder\r
- { // TODO: Determin if these windoze style folder identifiers \r
- // linux counterparts\r
+ { // TODO: Determine if these windoze style folder identifiers \r
+ // have unix/linux counterparts\r
ApplicationData,\r
CommonApplicationData,\r
CommonProgramFiles,\r
Templates\r
}\r
\r
+ // TODO: Make sure the security attributes do what I expect\r
+ \r
/// <summary>\r
/// Gets the command line for this process\r
/// </summary>\r
public static string CommandLine\r
- {\r
+ { // TODO: Coordinate with implementor of EnvironmentPermissionAttribute\r
+ // [EnvironmentPermissionAttribute(SecurityAction.Demand, Read = "COMMANDLINE")]\r
get\r
{\r
- return null;\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
/// <summary>\r
- /// Gets or sets the current directory\r
+ /// Gets or sets the current directory. Actually this is supposed to get\r
+ /// and/or set the process start directory acording to the documentation\r
+ /// but actually test revealed at beta2 it is just Getting/Setting the CurrentDirectory\r
/// </summary>\r
public static string CurrentDirectory\r
{\r
+ // originally it was my thought that the external call would be made in\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
get\r
{\r
- // TODO: needs more research/work/thought\r
- return GetEnvironmentVariable("PWD");\r
+ return MonoIO.GetCurrentDirectory ();\r
}\r
+ [MonoTODO("disabled because of compile error. Need mcs magic.")]\r
+ //[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]\r
set\r
{\r
+ MonoIO.SetCurrentDirectory (value);\r
}\r
}\r
\r
/// <summary>\r
/// Gets or sets the exit code of this process\r
/// </summary>\r
+ [MonoTODO]\r
public static int ExitCode\r
- {\r
+ { // TODO: find a way to implement this property\r
get\r
{\r
- return 0;\r
+ throw new NotImplementedException ();\r
}\r
set\r
{\r
+ throw new NotImplementedException ();\r
}\r
}\r
\r
/// <summary>\r
/// Gets the name of the local computer\r
/// </summary>\r
- public static string MachineName\r
- {\r
- get\r
- {\r
- // TODO: needs more research/work/thought\r
- return GetEnvironmentVariable("HOSTNAME");\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 "\n";\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 null;\r
}\r
\r
/// <summary>\r
- /// Get a string containing a trace of the stack\r
+ /// Get StackTrace\r
/// </summary>\r
+ [MonoTODO]\r
public static string StackTrace\r
{\r
get\r
{\r
get\r
{\r
- return null;\r
+ return GetFolderPath(SpecialFolder.System);\r
}\r
}\r
\r
/// <summary>\r
/// Get the number of milliseconds that have elapsed since the system was booted\r
/// </summary>\r
+ [MonoTODO]\r
public static int TickCount\r
{\r
get\r
{\r
return 0;\r
+ //return getTickCount();\r
}\r
}\r
\r
/// <summary>\r
/// Get UserDomainName\r
/// </summary>\r
+ [MonoTODO]\r
public static string UserDomainName\r
{\r
get\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
public static string UserName\r
{\r
get\r
/// <summary>\r
/// Get the version of an assembly\r
/// </summary>\r
+ [MonoTODO]\r
public static Version Version\r
{\r
get\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
- return null;\r
- }\r
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]\r
+ public extern static string[] GetCommandLineArgs();\r
\r
/// <summary>\r
- /// Return a string containing the value of the environment variable identifed by parameter "variable"\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 null;\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
/// </summary>\r
+ \r
public static IDictionary GetEnvironmentVariables()\r
{\r
- return null;\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 folder specified by the "folder" parameter\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