test for IsNotWellFormed; remove a few done TODO:'s other clean up
diff --git a/inc/qcbor/qcbor_decode.h b/inc/qcbor/qcbor_decode.h
index b599070..eca4742 100644
--- a/inc/qcbor/qcbor_decode.h
+++ b/inc/qcbor/qcbor_decode.h
@@ -282,20 +282,20 @@
 
 
 
-
-/*
- Approx Size of this:
-   8 + 8 + 1 + 1 + 1 + (1 padding) + (4 padding) = 24 for first part
-                                                  (20 on a 32-bit machine)
-   16 bytes for the val union
-   16 bytes for label union
-   total = 56 bytes (52 bytes on 32-bit machine)
+/**
+ The largest value in @c utags that is unmapped and can be used without
+ mapping it through QCBORDecode_GetNthTag().
  */
+#define QCBOR_LAST_UNMAPPED_TAG (CBOR_TAG_INVALID16 - QCBOR_NUM_MAPPED_TAGS)
+
 
 /**
  The main data structure that holds the type, value and other info for
  a decoded item returned by QCBORDecode_GetNext() and
  QCBORDecode_GetNextWithTags().
+
+ This size of this may vary by compiler but is roughly 56 bytes on
+ a 64-bit CPU and 52 bytes on a 32-bit CPU.
  */
 typedef struct _QCBORItem {
    /** Tells what element of the @c val union to use. One of @c
@@ -395,43 +395,26 @@
       uint64_t    uint64;
    } label;
 
-   // Values below XXX are exact; values above XXX must be mapped
+   /** The tags on the item.  Tags nest, so index 0 in the array is
+       the tag on the data item itself, index 1 is the tag that
+       applies to the tag in index 0. The end of the list is indicated
+       by @ref CBOR_TAG_INVALID16
+
+       Tag nesting is uncommon and rarely deep. This implementation
+       only allows nesting to a depth of @ref QCBOR_MAX_TAGS_PER_ITEM,
+       usually 4.
+
+       Tags in the array below and equal to @ref
+       QCBOR_LAST_UNMAPPED_TAG are unmapped and can be used
+       directly. Tags above this must be be translated through
+       QCBORDecode_GetNthTag().
+
+       See also the large number of QCBORDecode_GetXxxx() functions in
+       qcbor_spiffy_decode.h for a way to decode tagged types without
+       having to reference this array.
+    */
    uint16_t uTags[QCBOR_MAX_TAGS_PER_ITEM];
 
-   /*
-
-    0-127, the tag value itself
-    128-255, index into tag map
-
-    The decode context stores 4 tags (32 bytes)
-
-    Could
-    - allocate space in decode context for new tags encountered, say 32 bytes worth for
-      four extra tags.
-    - require caller to pass in list of tags they are interested in, up to 128 even
-      This already exists. It is an error when an unknown tag is enountered.
-    - allow caller to give space to store tags if using tags > 128 in value
-      It is only an error if more distinct tag values are encountered
-      than there is space to remember them.
-    - Use storage alloator to expand space needed.
-
-
-    */
-
-   /*
-    Or use the existing tag mapping strategy, and
-    store the offset in 4-bits accommomdating use
-    of 64 tag values in a decode session and using
-    only 2 bytes to store the tag list.
-
-    Can elimiate getNextWithTags.
-
-    Add new function to get the tag value.
-
-    Is annoying to find tag value on error with
-    existing scheme.
-    */
-
 } QCBORItem;
 
 /**
@@ -688,24 +671,13 @@
                                 bool bAllStrings);
 
 /**
- @brief Configure list of caller-selected tags to be recognized.
+ @brief Deprecated -- Configure list of caller-selected tags to be recognized.
 
  @param[in] pCtx       The decode context.
  @param[out] pTagList  Structure holding the list of tags to configure.
 
- This is used to tell the decoder about tags beyond those that are
- built-in that should be recognized. The built-in tags are those with
- macros of the form @c CBOR_TAG_XXX.
-
- The list pointed to by @c pTagList must persist during decoding.  No
- copy of it is made.
-
- The maximum number of tags that can be added is @ref
- QCBOR_MAX_CUSTOM_TAGS.  If a list larger than this is given, the
- error will be returned when QCBORDecode_GetNext() is called, not
- here.
-
- See description of @ref QCBORTagListIn.
+ Tag handling has been revised and it is no longer ncessary to use this.
+ See QCBORDecode_GetNthTag().
  */
 void QCBORDecode_SetCallerConfiguredTagList(QCBORDecodeContext *pCtx, const QCBORTagListIn *pTagList);
 
@@ -851,6 +823,7 @@
  map or array has been encountered. This works the same for both
  definite and indefinite-length arrays.
 
+ TODO: revise this documentation
  This decoder support CBOR type 6 tagging. The decoding of particular
  given tag value may be supported in one of three different ways.
 
@@ -914,10 +887,10 @@
  - There are a few CBOR constructs that are not handled without some
  extra configuration. These are indefinite length strings and maps
  with labels that are not strings or integers. See QCBORDecode_Init().
-
  */
 QCBORError QCBORDecode_GetNext(QCBORDecodeContext *pCtx, QCBORItem *pDecodedItem);
 
+// TODO: finish this
 QCBORError QCBORDecode_PeekNext(QCBORDecodeContext *pCtx, QCBORItem *pDecodedItem);
 
 
@@ -935,6 +908,8 @@
 
  @retval QCBOR_ERR_TOO_MANY_TAGS  The size of @c pTagList is too small.
 
+ TODO: revise his documentation
+
  This works the same as QCBORDecode_GetNext() except that it also
  returns the full list of tags for the data item. This function should
  only be needed when parsing CBOR to print it out or convert it to
@@ -959,15 +934,15 @@
 QCBORError QCBORDecode_GetNextWithTags(QCBORDecodeContext *pCtx, QCBORItem *pDecodedItem, QCBORTagListOut *pTagList);
 
 
-
 /**
- @brief Determine if a CBOR item was tagged with a particular tag
+ @brief Determine if a CBOR item was tagged with a particular tag.
 
  @param[in] pCtx    The decoder context.
  @param[in] pItem   The CBOR item to check.
- @param[in] uTag    The tag to check, one of @c CBOR_TAG_XXX.
+ @param[in] uTag    The tag to check, one of @c CBOR_TAG_XXX,
+                   for example, @ref CBOR_TAG_DATE_STRING.
 
- @return 1 if it was tagged, 0 if not
+ @return true if it was tagged, false if not
 
  See QCBORDecode_GetNext() for the main description of tag
  handling. For tags that are not fully decoded a bit corresponding to
@@ -983,7 +958,7 @@
  add new tags to the internal list so they can be checked for with
  this function.
  */
-int QCBORDecode_IsTagged(QCBORDecodeContext *pCtx, const QCBORItem *pItem, uint64_t uTag);
+bool QCBORDecode_IsTagged(QCBORDecodeContext *pCtx, const QCBORItem *pItem, uint64_t uTag);
 
 
 /**
@@ -1095,7 +1070,6 @@
  This returns the same as QCBORDecode_GetError() and also
  resets the error state to @ref QCBOR_SUCCESS.
  */
-
 static QCBORError QCBORDecode_GetAndResetError(QCBORDecodeContext *pCtx);
 
 
@@ -1236,10 +1210,10 @@
     return uReturn;
 }
 
-// TODO: test this
 static inline bool QCBORDecode_IsNotWellFormed(QCBORError uErr)
 {
-   if(uErr >= QCBOR_ERR_FIRST_NOT_WELL_FORMED && uErr <= QCBOR_ERR_LAST_NOT_WELL_FORMED) {
+   if(uErr >= QCBOR_ERR_FIRST_NOT_WELL_FORMED &&
+      uErr <= QCBOR_ERR_LAST_NOT_WELL_FORMED) {
       return true;
    } else {
       return false;
@@ -1247,7 +1221,6 @@
 }
 
 
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/inc/qcbor/qcbor_private.h b/inc/qcbor/qcbor_private.h
index 15a4ee3..2adee68 100644
--- a/inc/qcbor/qcbor_private.h
+++ b/inc/qcbor/qcbor_private.h
@@ -70,7 +70,7 @@
  */
 #define QCBOR_NUM_MAPPED_TAGS 4
 
-#define QCBOR_LAST_UNMAPPED_TAG (CBOR_TAG_INVALID16 - QCBOR_NUM_MAPPED_TAGS)
+
 
 /*
  PRIVATE DATA STRUCTURE
diff --git a/inc/qcbor/qcbor_spiffy_decode.h b/inc/qcbor/qcbor_spiffy_decode.h
index d55d1b7..a89cc81 100644
--- a/inc/qcbor/qcbor_spiffy_decode.h
+++ b/inc/qcbor/qcbor_spiffy_decode.h
@@ -108,6 +108,20 @@
  another. In such designs, GetNext has to be used and the internal
  error checking can't be relied upon.
 
+
+ ----
+  GetNext will always try to get something. The other Get functions
+ will not try if there is an error.
+
+ Make it a decode option for GetNext to not try? That way it is
+ the same as all Get functions and can be used in the mix
+ with them?
+
+ GetNext is how you get things in an array you don't
+ know the type of.
+
+ ----
+
  @anchor Tag-Matcing
 
  Data types beyond the basic CBOR types of numbers, strings, maps and
diff --git a/src/qcbor_decode.c b/src/qcbor_decode.c
index fe91227..0041be8 100644
--- a/src/qcbor_decode.c
+++ b/src/qcbor_decode.c
@@ -1977,7 +1977,7 @@
 /*
  Public function, see header qcbor/qcbor_decode.h file
  */
-int QCBORDecode_IsTagged(QCBORDecodeContext *me,
+bool QCBORDecode_IsTagged(QCBORDecodeContext *me,
                          const QCBORItem   *pItem,
                          uint64_t           uTag)
 {
@@ -1986,11 +1986,11 @@
          break;
       }
       if(ConvertTag(me, pItem->uTags[i]) == uTag) {
-         return 1;
+         return true;
       }
    }
 
-   return 0;
+   return false;
 }
 
 
@@ -3655,10 +3655,6 @@
                                                int64_t             *pnValue,
                                                QCBORItem           *pItem)
 {
-   if(pMe->uLastError != QCBOR_SUCCESS) {
-      return;
-   }
-
    QCBORDecode_GetItemInMapSZ(pMe, szLabel, QCBOR_TYPE_ANY, pItem);
    if(pMe->uLastError != QCBOR_SUCCESS) {
       return;
@@ -3942,46 +3938,6 @@
 }
 
 
-void QCBORDecode_GetInt8ConvertInternal(QCBORDecodeContext *pMe, uint32_t uConvertTypes, int8_t *pnValue, QCBORItem *pItem)
-{
-   int64_t uValue;
-   QCBORDecode_GetInt64ConvertInternal(pMe, uConvertTypes, &uValue, pItem);
-   if(pMe->uLastError != QCBOR_SUCCESS) {
-      return;
-   }
-
-   if(QCBOR_Int64ToInt8(uValue, pnValue)) {
-      pMe->uLastError = QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW;
-   }
-}
-
-void QCBORDecode_GetInt8ConvertInternalInMapN(QCBORDecodeContext *pMe, int64_t nLabel, uint32_t uConvertTypes, int8_t *pnValue, QCBORItem *pItem)
-{
-   int64_t uValue;
-   QCBORDecode_GetInt64ConvertInternalInMapN(pMe, nLabel, uConvertTypes, &uValue, pItem);
-   if(pMe->uLastError != QCBOR_SUCCESS) {
-      return;
-   }
-
-   if(QCBOR_Int64ToInt8(uValue, pnValue)) {
-      pMe->uLastError = QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW;
-   }
-}
-
-void QCBORDecode_GetInt8ConvertInternalInMapSZ(QCBORDecodeContext *pMe, const char *szLabel, uint32_t uConvertTypes, int8_t *pnValue, QCBORItem *pItem)
-{
-   int64_t uValue;
-   QCBORDecode_GetInt64ConvertInternalInMapSZ(pMe, szLabel, uConvertTypes, &uValue, pItem);
-   if(pMe->uLastError != QCBOR_SUCCESS) {
-      return;
-   }
-
-   if(QCBOR_Int64ToInt8(uValue, pnValue)) {
-      pMe->uLastError = QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW;
-   }
-}
-
-
 
 
 void QCBORDecode_GetUint64ConvertInternalInMapN(QCBORDecodeContext *pMe,
diff --git a/test/qcbor_decode_tests.c b/test/qcbor_decode_tests.c
index 090be4c..deb4c6c 100644
--- a/test/qcbor_decode_tests.c
+++ b/test/qcbor_decode_tests.c
@@ -1613,25 +1613,6 @@
 }
 
 
-static bool IsNotWellFormedError(QCBORError nErr)
-{
-   switch(nErr){
-      case QCBOR_ERR_INDEFINITE_STRING_CHUNK:
-      case QCBOR_ERR_ARRAY_OR_MAP_STILL_OPEN:
-      case QCBOR_ERR_UNSUPPORTED:
-      case QCBOR_ERR_HIT_END:
-      case QCBOR_ERR_BAD_TYPE_7:
-      case QCBOR_ERR_BAD_BREAK:
-      case QCBOR_ERR_EXTRA_BYTES:
-      case QCBOR_ERR_BAD_INT:
-      case QCBOR_ERR_NO_MORE_ITEMS: // TODO: really keep this?
-         return true;
-      default:
-         return false;
-   }
-}
-
-
 int32_t NotWellFormedTests()
 {
    // Loop over all the not-well-formed instance of CBOR
@@ -1649,17 +1630,18 @@
       QCBORDecode_SetMemPool(&DCtx, Pool, 0);
 
       // Loop getting items until no more to get
-      QCBORError nCBORError;
+      QCBORError uCBORError;
       do {
          QCBORItem Item;
 
-         nCBORError = QCBORDecode_GetNext(&DCtx, &Item);
-      } while(nCBORError == QCBOR_SUCCESS);
+         uCBORError = QCBORDecode_GetNext(&DCtx, &Item);
+      } while(uCBORError == QCBOR_SUCCESS);
 
       // Every test vector must fail with
       // a not-well-formed error. If not
       // this test fails.
-      if(!IsNotWellFormedError(nCBORError)) {
+      if(!QCBORDecode_IsNotWellFormed(uCBORError) &&
+         uCBORError != QCBOR_ERR_NO_MORE_ITEMS) {
          // Return index of failure in the error code
          return 2000 + nIterate;
       }