3b50cb997dee357ca383b0f1c262d7912c3b64c6
tdreszer
  Tue Nov 16 11:05:25 2010 -0800
Added 3 state boolean to distinguish between unknown and set
diff --git src/inc/common.h src/inc/common.h
index 5fb77dd..cd78c75 100644
--- src/inc/common.h
+++ src/inc/common.h
@@ -1335,16 +1335,31 @@
 #endif
 ;
 
 // SETTING_ON set of macros are frequently used comparisons of string values for boolean questions.
 // Notice the subtle difference between NOT_ON and IS_OFF.  NOT_ON could be NULL but IS_OFF must be explicitly set
 #define SETTING_IS_ON(setting)    (setting && (sameWord(setting,"on") || sameWord(setting,"true") || sameWord(setting,"enabled") || atoi(setting) != 0))
 #define SETTING_NOT_ON(setting)   (!SETTING_IS_ON(setting))
 #define SETTING_IS_OFF(setting)   (setting && (sameWord(setting,"off") || sameWord(setting,"false") || sameWord(setting,"disabled") || atoi(setting) == 0))
 
 // Standard bit mask macros
 #define BITS_ADD(    flags,bits) ((flags) = ((flags) |  (bits)))
 #define BITS_REMOVE( flags,bits) ((flags) = ((flags) & ~(bits)))
 #define BITS_ARE_ON( flags,bits) (((flags) & (bits)) == (bits))
 #define BITS_ARE_OFF(flags,bits) (((flags) & (bits)) == 0)
 
+// It is sometimes useful to distinguish between 3 "boolean" states: TRUE, FALSE and UNKNOWN
+enum enumBool
+    {
+    beUnknown=0,              // Not yet set
+    ebYes=1,                  // already set to TRUE
+    ebNo=-1                   // already set to FALSE
+    };
+#define SET_TO_YES(ebool) { (ebool) = ebYes; }
+#define SET_TO_NO(ebool)  { (ebool) = ebNo; }
+#define IS_YES(ebool)     ((ebool) == ebYes)
+#define IS_NO(ebool)      ((ebool) == ebNo)
+#define IS_KNOWN(ebool)   (IS_YES(ebool) || IS_NO(ebool))
+#define IS_TRUE           IS_YES
+#define IS_FALSE          IS_NO
+
 #endif /* COMMON_H */