summaryrefslogtreecommitdiff
path: root/getopt/GetOpt.cs
diff options
context:
space:
mode:
authorfcolin2007-02-15 15:14:02 +0000
committerfcolin2007-02-15 15:14:02 +0000
commit56650b6075ad93b000ee2bc53a8ef8fb96077828 (patch)
treeb484590598022aa268470baf7030de42be8ed7c2 /getopt/GetOpt.cs
parent52758d6ab4138dfa7cfe57e7b1ba10c6c085cb0f (diff)
downloadivy-csharp-56650b6075ad93b000ee2bc53a8ef8fb96077828.zip
ivy-csharp-56650b6075ad93b000ee2bc53a8ef8fb96077828.tar.gz
ivy-csharp-56650b6075ad93b000ee2bc53a8ef8fb96077828.tar.bz2
ivy-csharp-56650b6075ad93b000ee2bc53a8ef8fb96077828.tar.xz
les Programmes en mode console IvyPerf et autres
utilise cette lib pour extraires les argument ligne de commande
Diffstat (limited to 'getopt/GetOpt.cs')
-rw-r--r--getopt/GetOpt.cs98
1 files changed, 98 insertions, 0 deletions
diff --git a/getopt/GetOpt.cs b/getopt/GetOpt.cs
new file mode 100644
index 0000000..a158073
--- /dev/null
+++ b/getopt/GetOpt.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Specialized;
+using System.Collections.Generic;
+
+namespace Gnu
+{
+ /// <summary>
+ /// An implementation of the getopt standard, as used by Gnu GetOpt
+ /// </summary>
+ public class GetOpt
+ {
+ StringCollection m_params = new StringCollection();
+ StringCollection m_extras = new StringCollection();
+ List<Arg> m_args = new List<Arg>();
+
+ public GetOpt(string[] CommandLineArgs, string ParametersDescription)
+ {
+ // Import the string array into the collection
+ foreach(string s in CommandLineArgs)
+ {
+ m_params.Add(s);
+ }
+
+ // Parse the params description
+ for(int i = 0; i < ParametersDescription.Length; i++)
+ {
+ Arg a = new Arg();
+ a.Flag = ParametersDescription[i];
+ if((ParametersDescription.Length > i + 1) && (ParametersDescription[i + 1] == ':'))
+ {
+ a.TakesParameter = true;
+ i++;
+ }
+
+ m_args.Add(a);
+ }
+ }
+
+ public Arg NextArg()
+ {
+ SnarfExtras();
+
+ if(m_params.Count == 0)
+ return null;
+
+ foreach(Arg a in m_args)
+ {
+ if(a.Flag == m_params[0][1] && m_params[0][0] == '-' )
+ {
+ Arg matched = a;
+ try
+ {
+ if(a.TakesParameter)
+ {
+ matched.Parameter = m_params[1];
+ m_params.RemoveAt(1);
+ }
+ }
+ catch(Exception)
+ {
+ }
+
+ m_params.RemoveAt(0);
+ return matched;
+ }
+ }
+
+ if(m_params[0][0] == '-')
+ {
+ Arg tempa = new Arg();
+ tempa.Flag = m_params[0][1];
+ tempa.TakesParameter = false;
+ return tempa;
+ }
+ return null;
+ }
+
+ public StringCollection Extras
+ {
+ get
+ {
+ SnarfExtras();
+
+ return m_extras;
+ }
+ }
+
+ private void SnarfExtras()
+ {
+ // Parameters must start with a hyphen
+ while((m_params.Count > 0) && (m_params[0][0] != '-'))
+ {
+ m_extras.Add(m_params[0]);
+ m_params.RemoveAt(0);
+ }
+ }
+ }
+}