Main Page | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

TinkerKnobs.H

Go to the documentation of this file.
00001 // TinkerKnobs.H
00002 //
00003 // 3/20/98 WAH:  Made initializations of "d" in Read methods explicit
00004 //               assignments instead.
00005 // 4/6/98 WAH:   Made clearer error message for unset TINKERKNOBS.
00006 
00007 #ifndef TINKERKNOBS_H
00008 #define TINKERKNOBS_H
00009 
00010 #include "TinkerHash.H"
00011 
00012 #include <stdio.h>
00013 #include <stdlib.h>
00014 #include <ctype.h>
00015 
00016 #define KNOB_TRUE ((char) 1)
00017 #define KNOB_FALSE ((char) 0)
00018 
00019 #define DEFAULT_KNOBTABLE_SIZE (64)
00020 typedef char* knobstring;
00021 
00022 class knobnamelist
00023 {
00024   friend class knobs;
00025 
00026   char *name;
00027   class knobnamelist *next;
00028 
00029   knobnamelist (char *n)
00030   {
00031     name = new char [strlen (n) + 1];
00032     strcpy (name, n);
00033     next = NULL;
00034   }
00035   ~knobnamelist() {delete[] name; delete next;}
00036 }; // end class knobnamelist
00037 
00038 class knobs
00039 {
00040   char *customknobfile;
00041   hashtable *t;
00042   knobnamelist *names;
00043 
00044   char *curfname;
00045   char *defaultpanel;
00046 
00047 public:
00048   knobs (char *customk = NULL)
00049   {
00050     char *commonknobs = getenv ("TINKERKNOBS");
00051     if (commonknobs == NULL)
00052       {
00053         fprintf (stderr, "***Tinker Knobs Error***\n"
00054 "Please set the environment variable TINKERKNOBS to the full pathname of\n"
00055 "the common Tinker knob file, e.g.:\n"
00056 "setenv TINKERKNOBS /ncsu/tinker/tools/LEGO/knobs.txt\n\n");
00057         exit(1);
00058       } // end if
00059 
00060     t = new hashtable(DEFAULT_KNOBTABLE_SIZE);
00061     names = NULL;
00062     (void) Load (commonknobs);
00063     if (customk != NULL)
00064       {
00065         customknobfile = new char [strlen (customk) + 1];
00066         strcpy (customknobfile, customk);
00067       } // end if
00068     else
00069       {
00070         customk = getenv ("MYTINKERKNOBS");
00071         if (customk != NULL)
00072           {
00073             customknobfile = new char [strlen (customk) + 1];
00074             strcpy (customknobfile, customk);
00075           } // end if
00076         else
00077           customknobfile = NULL;
00078       } // end else
00079 
00080     if (customknobfile != NULL)
00081       (void) Load (customknobfile);
00082     curfname = NULL;
00083     defaultpanel = NULL;
00084   }
00085   ~knobs()
00086   {
00087     delete[] customknobfile; delete t; delete names; delete defaultpanel;
00088   }
00089 
00090   char *GetDefaultPanel (void) { return defaultpanel; }
00091   void SetDefaultPanel (char *dp)
00092   {
00093     delete[] defaultpanel;
00094     defaultpanel = new char [strlen (dp) + 1];
00095     strcpy (defaultpanel, dp);
00096     return;
00097   }
00098 
00099   int Load (char *);
00100   int Load (FILE *);
00101 
00102   char Read (char *knobname, char &d)
00103   {
00104     char *pk;
00105 
00106     d = '\0';
00107     if (strchr (knobname, ':') == NULL)
00108       {
00109         if (defaultpanel == NULL)
00110           {
00111             fprintf (stderr, "No default panel specified for knob %s.\n",
00112                      knobname);
00113             exit(1);
00114           } // end if
00115         pk = new char [strlen (defaultpanel) + strlen (knobname) + 2];
00116         sprintf (pk, "%s:%s", defaultpanel, knobname);
00117         t->Lookup (pk, d);
00118         delete[] pk;
00119         return d;
00120       }
00121     else
00122       return t->Lookup (knobname, d);
00123   }
00124   int Read (char *knobname, int &d)
00125   {
00126     char *pk;
00127 
00128     d = 0;
00129     if (strchr (knobname, ':') == NULL)
00130       {
00131         if (defaultpanel == NULL)
00132           {
00133             fprintf (stderr, "No default panel specified for knob %s.\n",
00134                      knobname);
00135             exit(1);
00136           } // end if
00137         pk = new char [strlen (defaultpanel) + strlen (knobname) + 2];
00138         sprintf (pk, "%s:%s", defaultpanel, knobname);
00139         t->Lookup (pk, d);
00140         delete[] pk;
00141         return d;
00142       }
00143     else
00144       return t->Lookup (knobname, d);
00145   }
00146   double Read (char *knobname, double &d)
00147   {
00148     char *pk;
00149 
00150     d = 0.0;
00151     if (strchr (knobname, ':') == NULL)
00152       {
00153         if (defaultpanel == NULL)
00154           {
00155             fprintf (stderr, "No default panel specified for knob %s.\n",
00156                      knobname);
00157             exit(1);
00158           } // end if
00159         pk = new char [strlen (defaultpanel) + strlen (knobname) + 2];
00160         sprintf (pk, "%s:%s", defaultpanel, knobname);
00161         t->Lookup (pk, d);
00162         delete[] pk;
00163         return d;
00164       }
00165     else
00166       return t->Lookup (knobname, d);
00167   }
00168   knobstring Read (char *knobname, knobstring &d)
00169   {
00170     char *pk;
00171 
00172     d = NULL;
00173     if (strchr (knobname, ':') == NULL)
00174       {
00175         if (defaultpanel == NULL)
00176           {
00177             fprintf (stderr, "No default panel specified for knob %s.\n",
00178                      knobname);
00179             exit(1);
00180           } // end if
00181         pk = new char [strlen (defaultpanel) + strlen (knobname) + 2];
00182         sprintf (pk, "%s:%s", defaultpanel, knobname);
00183         t->Lookup (pk, (tinkerhash_pvoid &) d);
00184         delete[] pk;
00185         return (knobstring) d;
00186       }
00187     else
00188       return (knobstring) t->Lookup (knobname, (tinkerhash_pvoid &) d);
00189   }
00190 
00191   void Adjust (char *knobname, char d)
00192   {
00193     char *pk;
00194 
00195     if (strchr (knobname, ':') == NULL)
00196       {
00197         if (defaultpanel == NULL)
00198           {
00199             fprintf (stderr, "No default panel specified for knob %s.\n",
00200                      knobname);
00201             exit(1);
00202           } // end if
00203         pk = new char [strlen (defaultpanel) + strlen (knobname) + 2];
00204         sprintf (pk, "%s:%s", defaultpanel, knobname);
00205         t->Set (pk, d);
00206         delete[] pk;
00207         return;
00208       }
00209     else
00210       t->Set (knobname, d);
00211   }
00212   void Adjust (char *knobname, int d)
00213   {
00214     char *pk;
00215 
00216     if (strchr (knobname, ':') == NULL)
00217       {
00218         if (defaultpanel == NULL)
00219           {
00220             fprintf (stderr, "No default panel specified for knob %s.\n",
00221                      knobname);
00222             exit(1);
00223           } // end if
00224         pk = new char [strlen (defaultpanel) + strlen (knobname) + 2];
00225         sprintf (pk, "%s:%s", defaultpanel, knobname);
00226         t->Set (pk, d);
00227         delete[] pk;
00228         return;
00229       }
00230     else
00231       t->Set (knobname, d);
00232   }
00233   void Adjust (char *knobname, double d)
00234   {
00235     char *pk;
00236 
00237     if (strchr (knobname, ':') == NULL)
00238       {
00239         if (defaultpanel == NULL)
00240           {
00241             fprintf (stderr, "No default panel specified for knob %s.\n",
00242                      knobname);
00243             exit(1);
00244           } // end if
00245         pk = new char [strlen (defaultpanel) + strlen (knobname) + 2];
00246         sprintf (pk, "%s:%s", defaultpanel, knobname);
00247         t->Set (pk, d);
00248         delete[] pk;
00249         return;
00250       }
00251     else
00252       t->Set (knobname, d);
00253   }
00254   void Adjust (char *knobname, tinkerhash_pvoid d)
00255   {
00256     char *pk;
00257 
00258     if (strchr (knobname, ':') == NULL)
00259       {
00260         if (defaultpanel == NULL)
00261           {
00262             fprintf (stderr, "No default panel specified for knob %s.\n",
00263                      knobname);
00264             exit(1);
00265           } // end if
00266         pk = new char [strlen (defaultpanel) + strlen (knobname) + 2];
00267         sprintf (pk, "%s:%s", defaultpanel, knobname);
00268         t->Set (pk, d);
00269         delete[] pk;
00270         return;
00271       }
00272     else
00273       t->Set (knobname, d);
00274   }
00275 
00276   int Save (char *);
00277   int Save (FILE *);
00278   int Parse (int, char *[]);
00279 
00280 }; // end class knobs
00281 
00282 #endif

Generated on Mon Jul 21 20:29:14 2003 for TINKER LEGO DOC by doxygen 1.3.2