chiark / gitweb /
Provide "help". Print a prompt
authorian <ian>
Sun, 3 Apr 2005 15:15:38 +0000 (15:15 +0000)
committerian <ian>
Sun, 3 Apr 2005 15:15:38 +0000 (15:15 +0000)
main.cc
parameter.cc
parameter.hh

diff --git a/main.cc b/main.cc
index fbacbfb..593cf01 100644 (file)
--- a/main.cc
+++ b/main.cc
@@ -111,6 +111,7 @@ int main(int argc, char **argv) {
     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";
@@ -156,6 +157,8 @@ int main(int argc, char **argv) {
       } 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;
index 89566fd..cc8b175 100644 (file)
@@ -18,11 +18,26 @@ AnyParameter* AnyParameter::find(const char *n) {
   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;
index 07b0137..b426e37 100644 (file)
@@ -13,7 +13,8 @@ class AnyParameter {
 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;
@@ -21,17 +22,18 @@ public:
   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
@@ -40,8 +42,7 @@ 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) {