Diverse Wiimotegerelateerde aanpassingen. Projectinstellingen Wiiuse en Wiiusej nogmaals aangepast. Getracht Wiiscan te compileren, maar dit geeft vooralsnog problemen. De bedoeling is om bij de -c -d en -a argumenten ook waarden met spaties (op een of andere manier) te accepteren. Dit zou het mogelijk maken om behalve wiimotes ook het balance board te pairen. Voorlopig opgelost door een handmatige aanpassing in wiiscan.exe, opgeslagen als wiiscan-bb.exe.

This commit is contained in:
2011-10-15 14:54:34 +00:00
parent a605e79f40
commit 80f639474b
56 changed files with 3229 additions and 262 deletions

143
cpp/wiiscan/src/args.h Normal file
View File

@@ -0,0 +1,143 @@
// The code is copyrighted 2008 by Carsten Frigaard.
// All rights placed in public domain under GNU licence V2, 2008
//
// © 2008 Carsten Frigaard. Permission to use, copy, modify, and distribute this software
// and its documentation for any purpose and without fee is hereby granted, provided that
// the above copyright notice appear in all copies and that both that copyright notice
// and this permission notice appear in supporting documentation.
#ifndef __ARGS_H__
#define __ARGS_H__
class args{
private:
typedef vector<string> t_args;
t_args m_args;
void Remove(t_args::iterator itt1,int n)
{
t_args args2;
for(t_args::iterator itt2=m_args.begin();itt2!=m_args.end();++itt2) {
if(itt2!=itt1) args2.push_back(*itt2);
else {if (--n>0) ++itt1;}
}
m_args=args2;
}
t_args::iterator Find(const string& v)
{
for(t_args::iterator itt=m_args.begin();itt!=m_args.end();++itt) {
if (v==*itt) return itt;
}
return m_args.end();
}
t_args::const_iterator Find(const string& v) const
{
for(t_args::const_iterator itt=m_args.begin();itt!=m_args.end();++itt) {
if (v==*itt) return itt;
}
return m_args.end();
}
public:
args(const int argc,char **argv,const bool printargs=false)
{
for(int i=0;i<argc;++i) {m_args.push_back(argv[i]);}
if (printargs) cout << "% Call args: " << *this << endl;
}
string operator[](const size_t i) const
{
if(i>=size()) throw_("argument[] out of range");
return m_args[i];
}
size_t size() const {return m_args.size();}
bool hasopt(const string& tag) const {return Find(tag)!=m_args.end();}
template<class T> T Totype(const size_t i) const {return totype<T>((*this)[i]);}
template<class T> T Tounit(const size_t i) const {
const string& s=(*this)[i+1];
#ifndef USE_UNITS
// fake test of units, primitive test, must be one-of: kpc, per_kpc and msun1E10
if (s!="kpc/h" && s!="h/kpc" && s!="msun1E10/h") throw_("bad unit=<" + s + ">, can only handle units of type: kpc/h, h/kpc, and msun1E10/h");
#endif
return totype<T>((*this)[i] + " " + s);
}
template<class T>
T parseval(const string& tag,const T& defaultval)
{
t_args::iterator itt=Find(tag);
if (itt==m_args.end() || itt+1==m_args.end()) return defaultval;
const T v=totype<T>(*(++itt));
Remove(--itt,2);
return v;
}
template<class T,class R>
pair<T,R> parseval(const string& tag,const T& defaultval1,const R& defaultval2)
{
t_args::iterator itt=Find(tag);
if (itt==m_args.end() || itt+1==m_args.end() || itt+2==m_args.end()) return make_pair(defaultval1,defaultval2);
const T v1=totype<T>(*(++itt));
const R v2=totype<R>(*(++itt));
Remove(----itt,3);
return make_pair(v1,v2);
}
template<class T>
T parseunit(const string& tag,const T& defaultval)
{
t_args::iterator itt=Find(tag);
if (itt==m_args.end() || itt+2==m_args.end()) return defaultval;
const string s1=*(++itt);
const string s2=*(++itt);
const T v=totype<T>(s1 + " " + s2);
Remove(----itt,3);
return v;
}
bool parseopt(const string& tag)
{
t_args::iterator itt=Find(tag);
if (itt==m_args.end()) return false;
Remove(itt,1);
return true;
}
int getoptindex(const string& tag) const
{
int n=0;
for(t_args::const_iterator itt=m_args.begin();itt!=m_args.end();++itt,++n) {
if (tag==*itt) {
assert( n>=0 && size_t(n)<m_args.size());
return n;
}
}
return -1;
}
void remove(const size_t i,const size_t n=1)
{
if (i>m_args.size() || i+n>m_args.size()) throw_("out of range");
m_args.erase(m_args.begin()+i,m_args.begin()+i+n);
}
friend ostream& operator<<(ostream& s,const args& v)
{
for(t_args::const_iterator itt=v.m_args.begin();itt!=v.m_args.end();++itt){
s << *itt << " ";
}
return s;
}
};
#endif // __ARGS_H__