public FormMain(string[] args) { InitializeComponent(); InstParameters=Parameters.InterpretCommandLine(args); bool bFilenameZip=InstParameters.Contains("FilenameZip"); bool bPathApplication=InstParameters.Contains("PathApplication"); bool bFilenameApplication=InstParameters.Contains("FilenameApplication"); if(bFilenameZip=false||bPathApplication==false||bFilenameApplication==false) { string output="Unvollständige Parameter!\n\n"; output+="Parameterliste:\n"; foreach(string i in args) { output+=i+'\n'; } output+="\n"; output+="FilenameZip: "+bFilenameZip.ToString()+"\n"; output+="PathApplication: "+bPathApplication.ToString()+"\n"; output+="FilenameApplication: "+bFilenameApplication.ToString()+"\n"; output+="\n"; output+="Sollte dieser Fehler bei einem Updateprozess aufgetreten sein,\n"; output+="so laden Sie bitte eine neue Version unter http://www.seeseekey.net herunter."; MessageBox.Show(output, "Hinweis"); Environment.Exit(0); } FilenameZip=InstParameters.GetString("FilenameZip"); PathApplication=InstParameters.GetString("PathApplication"); FilenameApplication=InstParameters.GetString("FilenameApplication"); PathApplication=PathApplication.TrimEnd('\\')+'\\'; }
public Parameters GetParameters(string name, Parameters std) { object o=Get(name, std); if(o is Parameters) return (Parameters)o; return std; }
public Parameters AddDeep(Parameters values) { foreach(string key in values.items.Keys) { if(!items.ContainsKey(key)) { Put(key, values.items[key]); continue; } object valThis=items[key]; bool fPThis=(valThis is Parameters); object valThat=values.items[key]; bool fPThat=(valThat is Parameters); // Wenn beides pParameters sind, rekursiv weitermachen if(fPThis&&fPThat) { ((Parameters)valThis).AddDeep((Parameters)valThat); continue; } // Wenn beide keine Parameters sind -> Werte austauschen if(!fPThis&&!fPThat) { Put(key, valThat); // Put statt Add wegen des unbekannten Typs von 'valThat' continue; } // Jetzt ist eins Parameters und der andere nicht Parameters p; if(fPThis) { p=(Parameters)valThis; object o=valThat; // Wir tragen den anderen Wert als "$default$"-Eintrag ein p.Put("$default$", o); } else { p=(Parameters)valThat; object o=valThis; // Wir tragen den anderen Wert als "$default$"-Eintrag ein p.Put("$default$", o); Add(key, p); } } return this; }
////////////////////////////////////////////////////////////////////// // Spezial-Add-Methoden ////////////////////////////////////////////////////////////////////// // Fügt alle Werte des übergebenen Parameters ein. (Shallow Add) public Parameters Add(Parameters values) { foreach(string key in values.items.Keys) Put(key, values.items[key]); return this; }
// Parameters public Parameters Add(string name, Parameters val) { Put(name, val); return this; }
public static Parameters InterpretCommandLine(string[] args) { Parameters ret=new Parameters(); if(args.Length<1) return ret; // nix Argumente int filecount=0; string key; foreach(string str in args) { if(str[0]=='-') { int idx=str.IndexOf(':'); if(idx>=0) { key=str.Substring(1, idx-1); ret.Add(key, str.Substring(idx+1)); } else { key=str.Substring(1); ret.Add(key, true); } } else { key=String.Format("file{0:000}", filecount++); ret.Add(key, str); } } return ret; }
public static string GetHashString(Parameters value) { long hc=GetHash(value, 13); string ret="1-"; while(hc>0) { ret+=(char)(hc%26+'a'); hc/=17; } return ret; }
public static long GetHash(Parameters value, long hc) { unchecked { if(value==null) hc+=1345; else { List<string> keys=new List<string>(value.items.Keys); keys.Sort(StringComparer); foreach(string key in keys) { hc=GetHash(key, hc); object v=value.Get(key); if(v==null) hc=GetHash((Parameters)null, hc); else if(v is bool) hc=GetHash((bool)v, hc); else if(v is double) hc=GetHash((double)v, hc); else if(v is long) hc=GetHash((long)v, hc); else if(v is string) hc=GetHash((string)v, hc); else if(v is Parameters) hc=GetHash((Parameters)v, hc); else { hc*=1234597; hc=System.Math.Abs(hc); } } } hc*=1234597; hc=System.Math.Abs(hc); } return hc; }
void PutSub(string name, object val) { int ind=name.IndexOf('/'); if(ind!=-1) { // wenn sub-Block string mainkey=name.Substring(0, ind); string subkey=name.Substring(ind+1); Parameters newp=new Parameters(); newp.PutSub(subkey, val); PutLast(mainkey, newp); return; } PutLast(name, val); }