-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathProgram.cs
More file actions
134 lines (126 loc) · 4.31 KB
/
Copy pathProgram.cs
File metadata and controls
134 lines (126 loc) · 4.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using System;
using System.Collections.Generic;
namespace App {
class Program {
// types
/// <summary>
/// Defines a command function that takes input parameters,
/// and performs the necessary action.
/// </summary>
/// <param name="p">Input parameters.</param>
private delegate void Fn(Params p);
// static data
/// <summary>
/// Command map that associates command name with function.
/// </summary>
private static IDictionary<string, Fn> Cmd = new Dictionary<string, Fn> {
[""] = new Fn(List), ["get"] = new Fn(Get), ["set"] = new Fn(Set), ["delete"] = new Fn(Delete),
["has"] = new Fn(Has), ["add"] = new Fn(Add), ["remove"] = new Fn(Remove)
};
// static methods
/// <summary>
/// Jai Bapuji ki!
/// </summary>
/// <param name="args">Input parameters.</param>
static void Main(string[] args) {
var p = GetOpt(args);
var key = (p.args.Length == 0 ? "" : p.args[0]).ToLower();
key = Cmd.ContainsKey(key) ? key : "";
try { Cmd[key](p); }
catch(Exception e) { Console.Error.WriteLine("err: "+e.Message.ToLower()); }
}
/// <summary>
/// List all environment variables.
/// </summary>
/// <param name="p">Input parameters.</param>
private static void List(Params p) {
var env = Environment.GetEnvironmentVariables(p.mode);
foreach(var k in env.Keys)
Console.WriteLine(k+"="+env[k]);
}
/// <summary>
/// Get environment variable's value.
/// </summary>
/// <param name="p">Input parameters.</param>
private static void Get(Params p) {
var key = p.args.Length > 1 ? p.args[1] : "";
var val = Environment.GetEnvironmentVariable(key, p.mode);
if(val != null) Console.WriteLine(val);
}
/// <summary>
/// Set environment variable's value.
/// </summary>
/// <param name="p">Input parameters.</param>
private static void Set(Params p) {
if(p.args.Length < 2) return;
string key = p.args[1], val = p.args.Length > 2 ? p.args[2] : "";
Environment.SetEnvironmentVariable(key, val, p.mode);
}
/// <summary>
/// Delete environment variable.
/// </summary>
/// <param name="p">Input parameters.</param>
private static void Delete(Params p) {
if(p.args.Length > 1) Environment.SetEnvironmentVariable(p.args[1], null, p.mode);
}
/// <summary>
/// Tells whether a sub-value is in environment variable.
/// </summary>
/// <param name="p">Input parameters.</param>
private static void Has(Params p) {
string key = p.args.Length > 1 ? p.args[1] : "", sub = p.args.Length > 2 ? p.args[2] : "";
var val = Environment.GetEnvironmentVariable(key, p.mode);
Console.WriteLine(val != null ? (Array.IndexOf(val.Split(';'), sub) >= 0 ? 1 : 0) : 0);
}
/// <summary>
/// Add a sub-value to an environment variable.
/// </summary>
/// <param name="p">Input parameters.</param>
private static void Add(Params p) {
if(p.args.Length < 2) return;
string key = p.args[1], sub = p.args.Length > 2 ? p.args[2] : "";
var val = Environment.GetEnvironmentVariable(key, p.mode);
var arr = val == null || val == "" ? new string[0] : val.Split(';');
var lst = new List<string>(arr);
if(!lst.Contains(sub)) lst.Add(sub);
val = string.Join(";", lst);
Environment.SetEnvironmentVariable(key, val, p.mode);
}
/// <summary>
/// Remove a sub-value from an environment variable.
/// </summary>
/// <param name="p">Input parameters.</param>
private static void Remove(Params p) {
if(p.args.Length < 2) return;
string key = p.args[1], sub = p.args.Length > 2 ? p.args[2] : "";
var val = Environment.GetEnvironmentVariable(key, p.mode);
var arr = val == null || val == "" ? new string[0] : val.Split(';');
var lst = new List<string>(arr);
lst.Remove(sub);
val = string.Join(";", lst);
Environment.SetEnvironmentVariable(key, val, p.mode);
}
/// <summary>
/// Get input parameters to eenv.
/// </summary>
/// <param name="args">Input arguments.</param>
/// <returns>Input parameters.</returns>
private static Params GetOpt(string[] args) {
var p = new Params();
for(var i = 0; i < args.Length; i++) {
switch(args[i]) {
case "--machine":
case "-m":
p.mode = EnvironmentVariableTarget.Machine;
break;
default:
p.args = new string[args.Length - i];
Array.Copy(args, i, p.args, 0, p.args.Length);
i = args.Length;
break;
}
}
return p;
}
}
}