if (x11) list->display(*x11);
if (dualx11) list->display(*dualx11);
for (;;) {
+ cerr << "> ";
cin.getline(buf,sizeof(buf),'\n');
if (!cin.good()) {
cerr << "error reading command input, giving up\n";
} else if (!strcmp(buf,"quit")) {
exit(0);
} else if (!strcmp(buf,"list")) {
+ AnyParameter::help();
+ } else if (!strcmp(buf,"help")) {
AnyParameter::list();
} else if (!*buf) {
break;
return search;
}
+void AnyParameter::printvalue(void) {
+ cerr << name << " ";
+ rangecheckprint();
+}
+
void AnyParameter::list() {
for (AnyParameter* search= first;
search;
- search= search->next)
- search->rangecheck();
+ search= search->next) {
+ cerr << search->description << ": ";
+ search->printvalue();
+ }
+}
+
+void AnyParameter::help() {
+ for (AnyParameter* search= first;
+ search;
+ search= search->next) {
+ search->printvalue();
+ }
}
AnyParameter* AnyParameter::first= 0;
protected:
const char *name;
const char *description;
- virtual void rangecheck() =0;
+ void printvalue();
+ virtual void rangecheckprint() =0;
public:
AnyParameter(const char *n, const char *d);
virtual void operator ++() =0;
virtual void operator =(double) =0;
static AnyParameter *find(const char *n);
static void list();
+ static void help();
};
template<class T> class Parameter : AnyParameter {
T value, delta, min, max;
- void rangecheck();
+ void rangecheckprint();
public:
Parameter(const char *n, const char *d, T i, T de, T mi, T ma);
operator T (){ return value; }
- void operator ++(){ value+= delta; rangecheck(); }
- void operator --(){ value-= delta; rangecheck(); }
- void operator =(double v) { value= (T)v; rangecheck(); }
+ void operator ++(){ value+= delta; rangecheckprint(); }
+ void operator --(){ value-= delta; rangecheckprint(); }
+ void operator =(double v) { value= (T)v; rangecheckprint(); }
};
template<class T> Parameter<T>::Parameter
value=i; delta=de; min=mi; max=ma;
}
-template<class T> void Parameter<T>::rangecheck() {
- cerr << name << " ";
+template<class T> void Parameter<T>::rangecheckprint() {
if (value<min) {
value= min; cerr << "underflowed; ";
} else if (value>max) {