[esnacc-dev] [PATCH] cxx-lib: PrintXML cleanups

Aaron Conole aconole at bytheb.org
Wed Nov 23 13:32:49 UTC 2016


Most of the xml output was _close_ to Basic-XER; this commit brings
it more inline.  A future commit will add c-lib basic XER support as well.
Basic-XDR will need to wait until a suitable XML library is written.

Signed-off-by: Aaron Conole <aconole at bytheb.org>
---
 compiler/back-ends/c++-gen/gen-code.c | 324 +++++--------
 cxx-examples/src/main.cpp             |   2 +-
 cxx-lib/inc/asn-incl.h                | 120 +++--
 cxx-lib/inc/asn-listset.h             |   4 +-
 cxx-lib/src/asn-any.cpp               |  16 +-
 cxx-lib/src/asn-bool.cpp              |  13 +-
 cxx-lib/src/asn-int.cpp               | 858 ++++++++--------------------------
 cxx-lib/src/asn-null.cpp              |  12 +-
 cxx-lib/src/asn-octs.cpp              |  11 +-
 cxx-lib/src/asn-real.cpp              |  11 +-
 snacc.h                               |   9 -
 11 files changed, 435 insertions(+), 945 deletions(-)

diff --git a/compiler/back-ends/c++-gen/gen-code.c b/compiler/back-ends/c++-gen/gen-code.c
index a7fb29c..37e0269 100644
--- a/compiler/back-ends/c++-gen/gen-code.c
+++ b/compiler/back-ends/c++-gen/gen-code.c
@@ -527,7 +527,6 @@ PrintCxxTagAndLenList PARAMS ((src, t, tagList, lenVarName, bufVarName),
     char *classStr;
     char *formStr;
     Tag *tg;
-    Tag *last;
     int tagLen;
     int isShort;
 
@@ -544,7 +543,6 @@ PrintCxxTagAndLenList PARAMS ((src, t, tagList, lenVarName, bufVarName),
     /*
      * since encoding backward encode tags backwards
      */
-    last = (Tag*)LAST_LIST_ELMT (tagList);
     FOR_EACH_LIST_ELMT_RVS (tg, tagList)
     {
         classStr = Class2ClassStr (tg->tclass);
@@ -1163,40 +1161,42 @@ PrintCxxChoiceDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m, CxxRul
     /* print clone routine for ANY mgmt */
     PrintCloneMethod (hdr, src, td);
 
-    fprintf (hdr, "  %s		&operator = (const %s &that);\n", td->cxxTypeDefInfo->className, td->cxxTypeDefInfo->className);
-    fprintf (src, "%s &%s::operator = (const %s &that)\n", td->cxxTypeDefInfo->className, td->cxxTypeDefInfo->className, td->cxxTypeDefInfo->className);
+    fprintf (hdr, "  %s		&operator = (const %s &that);\n",
+             td->cxxTypeDefInfo->className, td->cxxTypeDefInfo->className);
+    fprintf (src, "%s &%s::operator = (const %s &that)\n",
+             td->cxxTypeDefInfo->className,
+             td->cxxTypeDefInfo->className,
+             td->cxxTypeDefInfo->className);
     fprintf (src, "{\n");
-    fprintf (src, "  if (this != &that)\n");
-    fprintf (src, "  {\n");
-    fprintf (src, "    Clear();\n");
+    fprintf (src, "    if (this != &that) {\n");
+    fprintf (src, "        Clear();\n");
    
     e = FIRST_LIST_ELMT (choice->basicType->a.choice);
-    fprintf (src, "    // Check first type in choice to determine if choice is empty\n");
-    fprintf (src, "    if (that.%s != NULL)\n", e->type->cxxTypeRefInfo->fieldName);
-    fprintf (src, "    {\n");
-    fprintf (src, "       switch (choiceId = that.choiceId)\n");
-    fprintf (src, "       {\n");
-
-    FOR_EACH_LIST_ELMT (e, choice->basicType->a.choice)
-    {
-	   fprintf (src, "         case %s:\n", e->type->cxxTypeRefInfo->choiceIdSymbol);
-	   if (e->type->cxxTypeRefInfo->isPtr)
-	   {
-           fprintf (src, "           %s = new %s(*that.%s);\n", e->type->cxxTypeRefInfo->fieldName, e->type->cxxTypeRefInfo->className,
-                    e->type->cxxTypeRefInfo->fieldName);
-       }
-	   else
-       {
-         fprintf (src, "           %s = that.%s;\n", e->type->cxxTypeRefInfo->fieldName, e->type->cxxTypeRefInfo->fieldName);
-       }
-	   fprintf (src, "           break;\n");
+    fprintf (src, "        if (that.%s != NULL) {\n",
+             e->type->cxxTypeRefInfo->fieldName);
+        fprintf (src, "            switch (choiceId = that.choiceId) {\n");
+
+    FOR_EACH_LIST_ELMT (e, choice->basicType->a.choice) {
+        fprintf (src, "                case %s:\n",
+                 e->type->cxxTypeRefInfo->choiceIdSymbol);
+        if (e->type->cxxTypeRefInfo->isPtr) {
+            fprintf (src, "                    %s = new %s(*that.%s);\n",
+                     e->type->cxxTypeRefInfo->fieldName,
+                     e->type->cxxTypeRefInfo->className,
+                     e->type->cxxTypeRefInfo->fieldName);
+        } else {
+            fprintf (src, "                    %s = that.%s;\n",
+                     e->type->cxxTypeRefInfo->fieldName,
+                     e->type->cxxTypeRefInfo->fieldName);
+        }
+        fprintf (src, "                break;\n");
     }
 
-    fprintf (src, "       }// end of switch\n");
-    fprintf (src, "     }// end of if\n");
-    fprintf (src, "  }\n");
+    fprintf (src, "            }\n");
+    fprintf (src, "        }\n");
+    fprintf (src, "    }\n");
     fprintf (src, "\n");
-    fprintf (src, "  return *this;\n");
+    fprintf (src, "    return *this;\n");
     fprintf (src, "}\n\n");
 
     /* BerEncodeContent */
@@ -1889,65 +1889,42 @@ PrintCxxChoiceDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m, CxxRul
         fprintf (src, "\t} // end of switch\n");
 
         fprintf (src, "} // end of %s::Print()\n\n", td->cxxTypeDefInfo->className);
-        /* ################################################################## */
-         
-        /* RWC;1/12/00; ADDED XML output capability. */
-        fprintf (hdr, "  void			PrintXML (std::ostream &os, const char *lpszTitle=NULL) const;\n");
 
-        fprintf (src, "void %s::PrintXML (std::ostream &os, const char *lpszTitle) const\n", td->cxxTypeDefInfo->className);
-        fprintf (src, "{\n");
-        fprintf (src, "  if (lpszTitle)\n");
-        fprintf (src, "  {\n");
-        fprintf (src, "     os << \"<\" << lpszTitle;\n");
-        fprintf (src, "        os << \" typeName=\\\"%s\\\" type=\\\"CHOICE\\\">\";\n", td->cxxTypeDefInfo->className);
-        fprintf (src, "  }\n");
-        fprintf (src, "  else\n");
-        fprintf (src, "        os << \"<%s type=\\\"CHOICE\\\">\";\n", td->cxxTypeDefInfo->className);
-        fprintf (src, "  switch (choiceId)\n");
-        fprintf (src, "  {\n");
+        fprintf(hdr, "  void			PrintXML (std::ostream &os, const char *lpszTitle=NULL) const;\n");
+
+        fprintf(src, "void %s::PrintXML (std::ostream &os, const char *lpszTitle) const\n", td->cxxTypeDefInfo->className);
+        fprintf(src, "{\n");
+        fprintf(src, "    const char *tagName = typeName();\n");
+        fprintf(src, "    if (lpszTitle)\n");
+        fprintf(src, "        tagName = lpszTitle;");
+        fprintf(src, "    os << \"<\" << tagName << \">\";\n");
+        fprintf(src, "    switch (choiceId) {\n");
 
         FOR_EACH_LIST_ELMT (e, choice->basicType->a.choice)
         {
-            fprintf (src, "    case %s:\n", e->type->cxxTypeRefInfo->choiceIdSymbol);
+            fprintf(src, "    case %s:\n",
+                     e->type->cxxTypeRefInfo->choiceIdSymbol);
 
             /* value notation so print the choice elmts field name */
             if (e->type->cxxTypeRefInfo->isPtr)
             {
-                fprintf (src, "      if (%s)\n", e->type->cxxTypeRefInfo->fieldName);
-                fprintf (src, "        %s->PrintXML(os", e->type->cxxTypeRefInfo->fieldName);
+                fprintf(src, "       if (%s) {\n",
+                        e->type->cxxTypeRefInfo->fieldName);
+                fprintf(src, "           %s->PrintXML(os", e->type->cxxTypeRefInfo->fieldName);
                 if (e->fieldName != NULL)
-                   fprintf (src, ",\"%s\");\n", e->fieldName);
+                   fprintf(src, ",\"%s\");\n", e->fieldName);
                 else
-                   fprintf (src, ");\n");
-                fprintf (src, "      else\n");
-                fprintf (src, "      {\n");
+                   fprintf(src, ");\n");
+                fprintf(src, "      }\n");
+            } else
+                fprintf(src, "      %s.PrintXML(os, \"%s\");\n",
+                        e->type->cxxTypeRefInfo->fieldName, e->fieldName);
 
-                if (e->fieldName != NULL)
-                {
-                    fprintf (src, "        os << \"<%s -- void3 -- /%s>\" << std::endl;\n", e->fieldName, e->fieldName);
-                }
-                else
-                {
-                    fprintf (src, "        os << \"<%s -- void3 -- /%s>\" << std::endl;\n", 
-                             e->type->cxxTypeRefInfo->fieldName, e->type->cxxTypeRefInfo->fieldName);
-                }
-                
-                fprintf (src, "      }\n");
-            }
-            else
-                fprintf (src, "      %s.PrintXML(os, \"%s\");\n", e->type->cxxTypeRefInfo->fieldName, e->fieldName);
-
-            fprintf (src, "      break;\n\n");
+            fprintf(src, "      break;\n\n");
         }
-        fprintf (src, "  } // end of switch\n");
-        fprintf (src, "  if (lpszTitle)\n");
-        fprintf (src, "     os << \"</\" << lpszTitle << \">\";\n");
-        fprintf (src, "  else\n");
-        fprintf (src, "        os << \"</%s>\";\n", td->cxxTypeDefInfo->className);
+        fprintf (src, "    } // end of switch\n");
+        fprintf (src, "    os << \"</\" << tagName << \">\";\n");
         fprintf (src, "} // %s::PrintXML\n\n", td->cxxTypeDefInfo->className);
-        
-        /* END XML Print capability. */
-        /* ################################################################## */
     }
     /* end of Print Method code */
 
@@ -1961,7 +1938,8 @@ PrintCxxChoiceDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m, CxxRul
 
 static void
 PrintCxxSeqDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m,
-    CxxRules *r ,TypeDef *td, Type *parent, Type *seq, int novolatilefuncs)
+                    CxxRules *r ,TypeDef *td, Type *parent ESNACC_UNUSED,
+                    Type *seq, int novolatilefuncs ESNACC_UNUSED)
 {
     NamedType *e;
     char *classStr;
@@ -1979,7 +1957,6 @@ PrintCxxSeqDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m,
     enum BasicTypeChoiceId tmpTypeId;
     NamedType *defByNamedType;
     NamedType *tmpElmt;
-    int allOpt;
 
     // DEFINE PER encode/decode tmp vars.
     NamedType **pSeqElementNamedType=NULL;
@@ -2939,87 +2916,50 @@ PrintCxxSeqDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m,
     if (printPrintersG)
 	{
 		PrintCxxSeqSetPrintFunction(src, hdr, td->cxxTypeDefInfo->className,
-			seq->basicType);
+                                    seq->basicType);
 
-        /* ##################################################################
-          RWC;1/12/00; ADDED XML output capability. */
-
-        fprintf (hdr, "  void		PrintXML (std::ostream &os, const char *lpszTitle=NULL) const;\n");
-        fprintf (src,"void %s::PrintXML (std::ostream &os, \n", td->cxxTypeDefInfo->className);
-        fprintf (src,"                   const char *lpszTitle) const\n");
-        fprintf (src, "{\n");
-        allOpt = AllElmtsOptional (seq->basicType->a.sequence);
-        fprintf (src, "  if (lpszTitle)\n");
-        fprintf (src, "  {\n");
-        fprintf (src, "     os << \"<\" << lpszTitle;\n");
-        fprintf (src, "     if (typeName() && strlen(typeName()))\n");
-        fprintf (src, "     {\n");
-        fprintf (src, "        os << \" typeName=\\\"\" << typeName() << \"\\\"\";\n");
-        fprintf (src, "     }\n");
-        fprintf (src, "  }\n");
-        fprintf (src, "  else\n");
-        fprintf (src, "  {\n");
-        fprintf (src, "     os << \"<NONE\";\n");
-        fprintf (src, "  }\n");
-        fprintf (src, "  if (typeName() && strlen(typeName()))\n");
-        fprintf (src, "  {\n");
-        fprintf (src, "     if (typeName() && strlen(typeName()))\n");
-        fprintf (src, "     {\n");
-        fprintf (src, "        os << \"<\" << typeName();\n");
-        fprintf (src, "     }\n");
-        fprintf (src, "  }\n");
-        fprintf (src, " os << \" type=\\\"SEQUENCE\\\">\" << std::endl;\n");
-        FOR_EACH_LIST_ELMT (e, seq->basicType->a.sequence)
-        {
-          inTailOptElmts = IsTailOptional (seq->basicType->a.sequence);
-          if (e->type->cxxTypeRefInfo->isPtr)
-          {
-             fprintf (src, "  if (%s (%s))\n", cxxtri->optTestRoutineName, 
-                      e->type->cxxTypeRefInfo->fieldName);
-             fprintf (src, "  {\n");
-             fprintf (src, "    %s->PrintXML(os", 
-                      e->type->cxxTypeRefInfo->fieldName);
-
-             if (e->fieldName != NULL)
-                 fprintf (src, ", \"%s\"", e->fieldName);
-                   
-             fprintf (src, ");\n");
-             fprintf (src, "  }\n");
-          }
-          else
-          {
-             fprintf (src, "    %s.PrintXML(os", e->type->cxxTypeRefInfo->fieldName);
-             if (e->fieldName != NULL)
-                fprintf (src, ", \"%s\"", e->fieldName);
-             fprintf (src, ");\n");
-          }
-          fprintf (src, "\n");
+        fprintf(hdr, "  void		PrintXML (std::ostream &os, const char *lpszTitle=NULL) const;\n");
+        fprintf(src, "void %s::PrintXML (std::ostream &os, const char *lpszTitle) const\n",
+                 td->cxxTypeDefInfo->className);
+        fprintf(src, "{\n");
+        fprintf(src, "    const char *tagName = typeName();\n");
+        fprintf(src, "    if (lpszTitle)\n");
+        fprintf(src, "        tagName = lpszTitle;\n");
+        fprintf(src, "    os << \"<\" << tagName << \">\";\n");
+
+        FOR_EACH_LIST_ELMT (e, seq->basicType->a.sequence) {
+            inTailOptElmts = IsTailOptional(seq->basicType->a.sequence);
+            if (e->type->cxxTypeRefInfo->isPtr) {
+                fprintf(src, "    if (%s (%s)) {\n",
+                        cxxtri->optTestRoutineName,
+                        e->type->cxxTypeRefInfo->fieldName);
+                fprintf(src, "        %s->",
+                        e->type->cxxTypeRefInfo->fieldName);
+            } else {
+                fprintf(src, "    %s.", e->type->cxxTypeRefInfo->fieldName);
+            }
+            fprintf(src, "PrintXML(os");
+            if (e->fieldName != NULL)
+                fprintf(src, ", \"%s\"", e->fieldName);
+            fprintf(src, ");\n");
+            if (e->type->cxxTypeRefInfo->isPtr)
+                fprintf(src, "    }\n");
+            fprintf(src, "\n");
         }
-        fprintf (src, "  if (lpszTitle)\n");
-        fprintf (src, "  {\n");
-        fprintf (src, "     os << \"</\" << lpszTitle << \">\" << std::endl;\n");
-        fprintf (src, "  }\n");
-        fprintf (src, "  else\n");
-        fprintf (src, "     if (typeName() && strlen(typeName()))\n");
-        fprintf (src, "     {\n");
-        fprintf (src, "        os << \"</\" << typeName() << \">\" << std::endl;\n");
-        fprintf (src, "     }\n");
-        fprintf (src, "} // %s::PrintXML\n\n\n", td->cxxTypeDefInfo->className);
-       /* END XML Print capability.
-       ################################################################## */
+        fprintf(src, "    os << \"</\" << tagName << \">\";\n");
+        fprintf(src, "} // %s::PrintXML\n\n\n", td->cxxTypeDefInfo->className);
     }
     /* end of print method code printer */
 
     /* close class definition */
     fprintf (hdr, "};\n\n\n");
-	novolatilefuncs = novolatilefuncs;
-    parent=parent; /*AVOIDS warning.*/
 } /* PrintCxxSeqDefCode */
 
 
 static void
 PrintCxxSetDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m,
-    CxxRules *r, TypeDef *td, Type *parent, Type *set, int novolatilefuncs)
+                    CxxRules *r, TypeDef *td, Type *parent ESNACC_UNUSED,
+                    Type *set, int novolatilefuncs ESNACC_UNUSED)
 {
     NamedType *e;
     char *classStr;
@@ -3034,11 +2974,9 @@ PrintCxxSetDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m,
     int elmtLevel=0;
     int varCount, tmpVarCount;
     int stoleChoiceTags;
-    int inTailOptElmts;
     int mandatoryElmtCount;
     enum BasicTypeChoiceId tmpTypeId;
     NamedType *defByNamedType;
-    int allOpt;
 
     // DEFINE PER encode/decode tmp vars.
     int *pSetElementTag=NULL;
@@ -3057,7 +2995,7 @@ PrintCxxSetDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m,
     /* write out the set elmts */
     FOR_EACH_LIST_ELMT (e, set->basicType->a.set)
     {		
-        fprintf (hdr, "  ");
+        fprintf (hdr, "    ");
     
 		/* JKG 7/31/03 */
 		/*The following code enclosed in this if/else statement */
@@ -3105,11 +3043,11 @@ PrintCxxSetDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m,
 
     /* Default constructor
 	*/
-    fprintf (hdr, "   %s(){Init();}\n", td->cxxTypeDefInfo->className);
+    fprintf (hdr, "     %s() { Init(); }\n", td->cxxTypeDefInfo->className);
 
 	/* Init() member function
 	 */
-	fprintf (hdr, "   void Init(void);\n");
+	fprintf (hdr, "     void Init(void);\n");
     fprintf (src, "void %s::Init(void)\n", td->cxxTypeDefInfo->className);
     fprintf (src, "{\n");
     FOR_EACH_LIST_ELMT (e, set->basicType->a.set)
@@ -3810,66 +3748,42 @@ PrintCxxSetDefCode (FILE *src, FILE *hdr, ModuleList *mods, Module *m,
 		PrintCxxSeqSetPrintFunction(src, hdr, td->cxxTypeDefInfo->className,
 			set->basicType);
 
-         /* ##################################################################
-           RWC;1/12/00; ADDED XML output capability. */
-        fprintf (hdr, "  void PrintXML (std::ostream &os, const char *lpszTitle=NULL) const;\n");
-        fprintf (src, "void %s::PrintXML (std::ostream &os, const char *lpszTitle) const\n", td->cxxTypeDefInfo->className);
-        fprintf (src, "{\n");
-
-        allOpt = AllElmtsOptional (set->basicType->a.set);
-        fprintf (src, "  if (lpszTitle)\n");
-        fprintf (src, "  {\n");
-        fprintf (src, "     os << \"<\" << lpszTitle;\n");
-        fprintf (src, "     os << \" typeName=\\\"%s\\\" type=\\\"SET\\\">\" << std::endl;\n", td->cxxTypeDefInfo->className);
-        fprintf (src, "  }\n");
-        fprintf (src, "  else\n");
-        fprintf (src, "     os << \"<%s type=\\\"SET\\\">\" << std::endl;\n", td->cxxTypeDefInfo->className);
-        FOR_EACH_LIST_ELMT (e, set->basicType->a.set)
-        {
-            inTailOptElmts = IsTailOptional (set->basicType->a.set);
-            if (e->type->cxxTypeRefInfo->isPtr)
-                fprintf (src, "  if (%s (%s))\n", cxxtri->optTestRoutineName, e->type->cxxTypeRefInfo->fieldName);
-            fprintf (src, "  {\n");
-            if (e->type->cxxTypeRefInfo->isPtr)
-            {
-                fprintf (src, "    (*%s).PrintXML(os", e->type->cxxTypeRefInfo->fieldName);
-                if (e->fieldName != NULL)
-                   fprintf (src, ", \"%s\"", e->fieldName);
-                fprintf (src, ");\n");
-            }
-            else
-            {
-                fprintf (src, "    %s.PrintXML(os", e->type->cxxTypeRefInfo->fieldName);
-                if (e->fieldName != NULL)
-                   fprintf (src, ", \"%s\"", e->fieldName);
-                fprintf (src, ");\n");
+        fprintf(hdr, "    void PrintXML (std::ostream &os, const char *lpszTitle=NULL) const;\n");
+        fprintf(src,
+                "void %s::PrintXML (std::ostream &os, const char *lpszTitle) const\n",
+                td->cxxTypeDefInfo->className);
+        fprintf(src, "{\n");
+        fprintf(src, "    const char *tagName = typeName();\n");
+        fprintf(src, "    if (lpszTitle) {\n");
+        fprintf(src, "        tagName = lpszTitle;\n");
+        fprintf(src, "    os << \"<\" << tagName << \">\";\n",
+                td->cxxTypeDefInfo->className);
+        FOR_EACH_LIST_ELMT (e, set->basicType->a.set) {
+            const char *fieldString = "%s";
+            if (e->type->cxxTypeRefInfo->isPtr) {
+                fprintf(src, "    if (%s (%s)) {\n",
+                        cxxtri->optTestRoutineName,
+                        e->type->cxxTypeRefInfo->fieldName);
+                fprintf(src, "        %s->",
+                        e->type->cxxTypeRefInfo->fieldName);
+            } else {
+                fprintf(src, "    %s.",
+                        e->type->cxxTypeRefInfo->fieldName);
             }
-            fprintf (src, "  }\n");
+            fprintf(src, "PrintXML(os");
+            if (e->fieldName != NULL)
+                fprintf(src, ", \"%s\"", e->fieldName);
+            fprintf (src, ");\n");
             if (e->type->cxxTypeRefInfo->isPtr)
-            {
-               fprintf (src, "  else\n");
-               if (e->fieldName)
-                  fprintf (src, "        os << \"<%s -- void2 -- />\" << std::endl;\n", e->fieldName);
-               else
-                  fprintf (src, "        os << \"<%s -- void2 -- />\" << std::endl;\n", e->type->cxxTypeRefInfo->fieldName);
-            }
-            fprintf (src, "\n");
-
+                fprintf(src, "    }\n");
         }      /* END For each set element */
-        fprintf (src, "  if (lpszTitle)\n");
-        fprintf (src, "     os << \"</\" << lpszTitle << \">\" << std::endl;\n");
-        fprintf (src, "  else\n");
-        fprintf (src, "     os << \"</%s>\" << std::endl;\n", td->cxxTypeDefInfo->className);
-        fprintf (src, "} // %s::PrintXML\n\n\n", td->cxxTypeDefInfo->className);
-        /* END XML Print capability.
-        ################################################################## */
+        fprintf(src, "    os << \"</\" << tagName << \">\";\n");
+        fprintf(src, "} // %s::PrintXML\n\n\n", td->cxxTypeDefInfo->className);
     }
     /* end of print method code */
 
     /* close class definition */
-    fprintf (hdr, "};\n\n\n");
-	novolatilefuncs = novolatilefuncs;
-    parent=parent; /*AVOIDS warning.*/
+    fprintf(hdr, "};\n\n\n");
 } /* PrintCxxSetDefCode */
 
 
diff --git a/cxx-examples/src/main.cpp b/cxx-examples/src/main.cpp
index d650d6e..0fcc67e 100644
--- a/cxx-examples/src/main.cpp
+++ b/cxx-examples/src/main.cpp
@@ -131,7 +131,7 @@ void fillTest(void)
 
         std::cout << std::endl;
 
-        octs.Print(std::cout);
+        octs.PrintXML(std::cout);
 
         std::cout << std::endl; 
         std::cout << len;
diff --git a/cxx-lib/inc/asn-incl.h b/cxx-lib/inc/asn-incl.h
index 7270f28..de78f45 100644
--- a/cxx-lib/inc/asn-incl.h
+++ b/cxx-lib/inc/asn-incl.h
@@ -10,6 +10,7 @@
 
 #include "asn-config.h"
 #include "asn-buf.h"
+#include "snaccexcept.h"
 
 #ifdef WIN32
 #if defined(_MSC_VER)
@@ -606,66 +607,97 @@ extern SNACCDLL_API char	numToHexCharTblG[];
 
 class SNACCDLL_API AsnInt : public AsnType, protected PERGeneral
 {
-protected:
+ protected:
 
-   unsigned char *m_bytes;
-   unsigned long  m_len;
+    unsigned char *m_bytes;
+    unsigned long  m_len;
    
-   void storeDERInteger(const unsigned char *pDataCopy, long dataLen, bool unsignedFlag);
-
-   void		Clear(){if(m_bytes) delete[] m_bytes; /*RWC*/ m_bytes = NULL; m_len = 0;}
-   long		lEncLen()const{return length();}
-   char		getByte(long offset)const{return m_bytes[offset];}
-   void		putByte(long offset, unsigned char cByte);
+    void storeDERInteger(const unsigned char *pDataCopy, long dataLen,
+                         bool unsignedFlag);
+    void Clear() { delete [] m_bytes; m_bytes = NULL; m_len = 0; }
+    long lEncLen() const { return length(); }
+    char getByte(long offset) const { return m_bytes[offset]; }
+    void putByte(long offset, unsigned char cByte);
 
-   virtual AsnLen	Interpret(AsnBufBits &b,long offset)const;
-   virtual void		Deterpret(AsnBufBits &b, AsnLen &bitsDecoded, long offset);
-   virtual void		Allocate(long size);
+    virtual AsnLen Interpret(AsnBufBits &b,long offset)const;
+    virtual void Deterpret(AsnBufBits &b, AsnLen &bitsDecoded, long offset);
+    virtual void Allocate(long size);
 
 public:
    AsnInt (AsnIntType val=0);
    AsnInt (const char *str, bool unsignedFlag = true);
    AsnInt (const AsnOcts &o, bool unsignedFlag = true);
    AsnInt (const char *str, const size_t len, bool unsignedFlag = true);
-   AsnInt (const AsnInt &that);//generate this
+   AsnInt (const AsnInt &that);
    virtual ~AsnInt ();
 
-   virtual  const ValueRange* ValueRanges(int &sizeVRList)const { sizeVRList = 0; return NULL;}
+   virtual const ValueRange* ValueRanges(int &sizeVRList) const
+   { sizeVRList = 0; return NULL; }
       
-   virtual AsnType* Clone() const				{ return new AsnInt(*this); }
-   virtual const char* typeName() const			{ return "AsnInt"; }
-    
-   operator AsnIntType() const;
-   bool        operator == (AsnIntType o) const;
-   bool        operator != (AsnIntType o) const		{ return !operator==(o);}
-   bool        operator == (const AsnInt &o) const;
-   bool        operator != (const AsnInt &o) const;
-   bool        operator < (const AsnInt &o) const;
-   AsnInt &    operator = (const AsnInt &o);//generate this
-   //unsigned char*  Append_m_bytes(const unsigned char* AppendBytes, unsigned long templen);    
-  
-   long		length()const{ return m_len; }
-   long		length(void){ return m_len; }
-   const unsigned char * c_str(void) const { return m_bytes; }
-   void		getPadded(unsigned char *&data, size_t &len, const size_t padToSize=0) const;
-
-   int		checkConstraints (ConstraintFailList* pConstraintFails)const;
-
-   void        Set(const unsigned char *str, size_t len, bool unsignedFlag=true);
-   void        Set(AsnIntType i);
+   virtual AsnType* Clone() const { return new AsnInt(*this); }
+   virtual const char* typeName() const { return "AsnInt"; }
+
+   template <typename int_t>
+   int_t toInteger() const
+   {
+       //FUNC("AsnInt::toInteger");
+
+       if (!m_bytes || m_len <= 0)
+           return 0;
+
+       int_t iResult = 0;
+
+       if (m_len > sizeof(int_t)) {
+           throw SNACCDLL_API
+               SnaccException("integer is too big for conversion to type",
+                              DECODE_ERROR);
+       }
+
+       // If big int is negative initialize result to -1
+       if ((m_bytes[0] >> 7 == 1)) {
+           iResult = -1;
+       }
+
+       for (unsigned int i = 0; i < m_len; i++)
+           iResult = (iResult << 8) | (AsnUIntType)(m_bytes[i]);
+       return iResult;
+   }
+
+   operator AsnIntType() const { return toInteger<AsnIntType>(); }
+   bool operator == (AsnIntType o) const;
+   bool operator != (AsnIntType o) const { return !operator==(o);}
+   bool operator == (const AsnInt &o) const;
+   bool operator != (const AsnInt &o) const;
+   bool operator < (const AsnInt &o) const;
+   AsnInt &operator = (const AsnInt &o);
+
+   long length() const { return m_len; }
+   long length(void) { return m_len; }
+   const unsigned char *c_str(void) const { return m_bytes; }
+   void getPadded(unsigned char *&data, size_t &len,
+                  const size_t padToSize=0) const;
+
+   int checkConstraints (ConstraintFailList* pConstraintFails) const;
+
+   void Set(const unsigned char *str, size_t len, bool unsignedFlag=true);
+   void Set(AsnIntType i);
 
    AsnLen         BEnc (AsnBuf &b) const;
    void           BDec (const AsnBuf &b, AsnLen &bytesDecoded);
    AsnLen         BEncContent (AsnBuf &b) const;
-   void           BDecContent (const AsnBuf &b, AsnTag tagId, AsnLen elmtLen, AsnLen &bytesDecoded);
-
-   virtual AsnLen PEnc (AsnBufBits &b)const;
-   AsnLen         PEncSemiConstrained (AsnBufBits &b, long lowerBound )const;
-   AsnLen		  PEncFullyConstrained (AsnBufBits &b, long lowerBound, long upperBound)const;
-   
-   void			  PDecSemiConstrained(AsnBufBits &b, long lowerBound, AsnLen &bitsDecoded);
-   void 		  PDecFullyConstrained (AsnBufBits &b, long lowerBound, long upperBound, AsnLen &bitsDecoded);
-   void			  PDec (AsnBufBits &b, AsnLen &bitsDecoded);
+   void           BDecContent (const AsnBuf &b, AsnTag tagId, AsnLen elmtLen,
+                               AsnLen &bytesDecoded);
+
+   virtual AsnLen PEnc (AsnBufBits &b) const;
+   AsnLen         PEncSemiConstrained(AsnBufBits &b, long lowerBound ) const;
+   AsnLen         PEncFullyConstrained(AsnBufBits &b, long lowerBound,
+                                       long upperBound) const;
+
+   void           PDecSemiConstrained(AsnBufBits &b, long lowerBound,
+                                      AsnLen &bitsDecoded);
+   void           PDecFullyConstrained(AsnBufBits &b, long lowerBound,
+                                       long upperBound, AsnLen &bitsDecoded);
+   void	          PDec(AsnBufBits &b, AsnLen &bitsDecoded);
 
 
    void      Print(std::ostream& os, unsigned short indent = 0) const;
diff --git a/cxx-lib/inc/asn-listset.h b/cxx-lib/inc/asn-listset.h
index 309fd98..96adc6c 100644
--- a/cxx-lib/inc/asn-listset.h
+++ b/cxx-lib/inc/asn-listset.h
@@ -8,6 +8,8 @@
 #ifndef SNACC_ASN_LISTSET_H
 #define SNACC_ASN_LISTSET_H
 
+#include "snacc.h"
+
 #ifdef _MSC_VER
 	#pragma warning(disable: 4786)		// Disable symbols truncated warning
 #endif
@@ -50,7 +52,7 @@ public:
 	virtual SNACC::SizeConstraint* SizeConstraints() const	{ return NULL; }
 //	virtual SNACC::SizeConstraint* SizeConstraints()		{ return NULL; }
 	
-	virtual void Allocate(long size)						{}
+	virtual void Allocate(long size ESNACC_UNUSED) {}
 	virtual void Clear()									{ this->clear(); }
 	virtual SNACC::AsnLen Interpret(SNACC::AsnBufBits& b, long offset) const;
 	virtual void Deterpret(SNACC::AsnBufBits& b, SNACC::AsnLen& bitsDecoded,
diff --git a/cxx-lib/src/asn-any.cpp b/cxx-lib/src/asn-any.cpp
index d0434c6..c06adf6 100644
--- a/cxx-lib/src/asn-any.cpp
+++ b/cxx-lib/src/asn-any.cpp
@@ -543,15 +543,13 @@ void AsnAny::Print(std::ostream& os, unsigned short indent) const
 
 void AsnAny::PrintXML (std::ostream &os, const char *lpszTitle) const 
 {
-   if (lpszTitle) 
-       os << "<" << lpszTitle << " type=\"ANY\">"; 
-   else
-       os << "<ANY>"; 
-   Print(os);
-   if (lpszTitle) 
-       os << "</" << lpszTitle << ">\n"; 
-   else
-       os << "</ANY>\n"; 
+    const char *tagName = typeName();
+
+    if (lpszTitle) tagName = lpszTitle;
+
+    os << "<" << tagName << ">";
+    Print(os);
+    os << "</" << tagName << ">\n";
 }
 
 AsnAny::~AsnAny()
diff --git a/cxx-lib/src/asn-bool.cpp b/cxx-lib/src/asn-bool.cpp
index f5cd4c8..9920f07 100644
--- a/cxx-lib/src/asn-bool.cpp
+++ b/cxx-lib/src/asn-bool.cpp
@@ -123,15 +123,18 @@ AsnLen AsnBool::BEncContent (AsnBuf &b) const
 // print the BOOLEAN's value in ASN.1 value notation to the given ostream
 void AsnBool::Print (std::ostream& os, unsigned short /*indent*/) const
 {
-	os << (value ? "TRUE" : "FALSE");
+	os << (value ? "true" : "false");
 }
 
 void AsnBool::PrintXML (std::ostream &os, const char *lpszTitle) const 
 {
-   os << "<BOOLEAN>"; 
-   if (lpszTitle) os << lpszTitle; 
-   os << "-"; 
-   Print(os); os << "</BOOLEAN>\n"; 
+    const char *tagName = typeName();
+    if (lpszTitle) {
+        tagName = lpszTitle;
+    }
+    os << "<" << tagName << ">";
+    Print(os);
+    os << "</" << tagName << ">";
 }
 
 char* AsnBool::checkBoolSingleVal(const bool m_SingleVal) const
diff --git a/cxx-lib/src/asn-int.cpp b/cxx-lib/src/asn-int.cpp
index 4c1a6bb..e0c210b 100644
--- a/cxx-lib/src/asn-int.cpp
+++ b/cxx-lib/src/asn-int.cpp
@@ -2,312 +2,18 @@
 //
 // MS 92/06/16
 // Copyright (C) 1992 Michael Sample and the University of British Columbia
+// Copyright (C) 2011-2015 Azimuth Systems, Inc.
+// Copyright (C) 2016 Red Hat, Inc
 //
 // This library is free software; you can redistribute it and/or
 // modify it provided that this copyright/license information is retained
 // in original form.
 //
-// If you modify this file, you must clearly indicate your changes.
-//
 // This source code is distributed in the hope that it will be
 // useful, but WITHOUT ANY WARRANTY; without even the implied warranty
 // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-//
-
-// $Log: asn-int.cpp,v $
-// Revision 1.66  2004/03/25 19:20:16  gronej
-// fixed some linux warnings
-//
-// Revision 1.65  2004/03/22 19:38:13  leonberp
-// changed ConstraintErrorStringList to be const to avoid possible memory corruption
-//
-// Revision 1.64  2004/03/09 16:48:45  gronej
-// Updated c++ constraint checking capability and constraint error handling
-//
-// Revision 1.63  2004/03/01 15:50:45  gronej
-// Took out SetConstraints() and member variables for constraints, replaced with functions that return constraint lists
-//
-// Revision 1.62  2004/02/12 18:55:09  gronej
-// Stable SNACC
-// non optional choices, sets and sequences are now not pointers
-// merged with list code
-// all memory leaks within SNACC fixed
-//
-// Revision 1.61  2004/02/11 19:08:48  nicholar
-// Updated Print() function so no longer uses global indent
-//
-// Revision 1.60  2004/02/06 00:39:13  nicholar
-// Changed AsnList to use std::list<T> instead of List<T>
-//
-// Revision 1.59  2004/02/04 14:59:27  gronej
-// Fixed a TON of memory leaks
-//
-// Revision 1.58  2004/02/03 14:44:32  gronej
-// made all constraint lists static to avoid memory issues
-//
-// Revision 1.57  2003/12/17 19:05:03  gronej
-// SNACC baseline merged with PER v1_7 tag
-//
-
-// Revision 1.54.2.14  2003/12/15 18:43:50  gronej
-// EKMS PER Beta Release Files
-//
-// Revision 1.54.2.13  2003/12/09 21:20:50  gronej
-// Updated to pull working EKMS test space
-//
-// Revision 1.54.2.12  2003/12/04 20:47:10  gronej
-// Moved bAlign out of all PEnc calls and into AsnBufBits as a member
-// An AsnBufBits is now invoked with a bAlign parameter defaulted to false
-//
-// Revision 1.54.2.11  2003/12/03 19:48:08  gronej
-// Fixed bitsDecoded to return correct value on decode operations
-//
-// Revision 1.54.2.10  2003/12/02 18:33:43  gronej
-// Updated and debugged PER constraint logic for primitives
-//
-// Revision 1.54.2.9  2003/12/02 17:00:09  colestor
-// Fixed unsetf(...) of HEX setting when printing.
-//
-// Revision 1.54.2.8  2003/11/26 14:23:17  colestor
-// Fixed AsnInt initialization.
-//
-// Revision 1.54.2.7  2003/11/06 20:23:25  gronej
-// Updated PER compiler with working Interpret() and Deterpret() functionality for AsnInt and String Types
-//
-// Revision 1.54.2.6  2003/11/05 14:58:54  gronej
-// working PER code merged with esnacc_1_6
-//
-
-// Revision 1.54.2.5  2003/11/04 18:04:08  gronej
-// Update PER compiler with some PERGeneral functionality  11/04/03
-//
-// Revision 1.54.2.4  2003/11/04 14:21:21  gronej
-// Update PER compiler with some PERGeneral functionality  11/04/03
-//
-// Revision 1.54.2.3  2003/10/22 12:45:58  gronej
-// Updating PER compiler
-//
-// Revision 1.54.2.2  2003/10/02 17:15:24  gronej
-// Updating PER compiler
-//
-// Revision 1.54.2.1  2003/08/12 20:04:38  gronej
-// no message
-//
-
-
-// Revision 1.54  2003/03/28 14:10:16  leonberp
-// added pragmas to get rid of warnings
-//
-// Revision 1.53  2003/03/17 17:35:16  leonberp
-// fixed compile errors for HPUX
-//
-// Revision 1.52  2003/01/28 17:30:44  leonberp
-// added AsnInt copy constructor and operator=
-//
-// Revision 1.51  2003/01/28 14:23:22  leonberp
-// replaced memmove with memcpy
-//
-// Revision 1.50  2003/01/28 14:10:13  leonberp
-// Added AsnInt destructor
-//
-// Revision 1.49  2003/01/27 20:58:06  leonberp
-// enhanced to use dynamically allocated unsigned char[] and length instead of basic_string<> for performance reasons also removed obsolete code
-//
-// Revision 1.48  2003/01/06 16:20:07  leonberp
-// Changed BDec() and BDecContent() to use const AsnBufs
-//
-// Revision 1.47  2002/12/22 01:20:52  colestor
-// (RWC)Updated PrintXML(...) details to better match specification for SEQUENCE OF and SET OF logic.
-//
-// Revision 1.46  2002/12/19 18:17:54  colestor
-// (RWC)Updated to allow integer output as ASCII.
-//
-// Revision 1.45  2002/12/17 20:27:40  leonberp
-// made BEnc() and BEncContent() const
-//
-// Revision 1.44  2002/11/25 20:21:19  leonberp
-// added AsnBuf copy constructor
-//
-// Revision 1.43  2002/10/23 21:02:48  leonberp
-// fixed AsnBuf references and fixed clock skew problem
-//
-// Revision 1.42  2002/10/23 10:51:10  mcphersc
-// Changed BUF_TYPE to AsnBuf
-//
-// Revision 1.41  2002/10/21 19:49:50  leonberp
-// changes for Linux and GCC 3.2
-//
-// Revision 1.40  2002/10/01 19:43:06  vracarl
-// now using c_ustr
-//
-// Revision 1.39  2002/09/25 13:54:54  vracarl
-// made asn_buf fixes
-//
-// Revision 1.38  2002/09/16 20:06:47  vracarl
-// new asn-octs changes
-//
-// Revision 1.37  2002/08/21 16:48:07  vracarl
-// added a FUNC and throw and checks to make sure the decimal number isn't too large
-//
-// Revision 1.36  2002/08/19 18:14:43  vracarl
-// added code to construct an int from decimal format
-//
-// Revision 1.35  2002/07/17 17:30:09  leonberp
-// fixed for unix
-//
-// Revision 1.34  2002/07/17 14:29:47  vracarl
-// removed #include<string.h>
-//
-// Revision 1.33  2002/07/15 17:04:14  vracarl
-// moved an indefinite len check
-//
-// Revision 1.32  2002/07/12 19:59:21  nicholar
-// Fixed bug in AsnInt:storeDERInteger.
-// Enhanced AsnInt::operator==(AsnIntType i) function.
-//
-// Revision 1.31  2002/06/17 18:42:14  leonberp
-// yet another bug fix
-//
-// Revision 1.30  2002/06/17 18:25:50  leonberp
-// fixed bug again
-//
-// Revision 1.29  2002/06/17 17:20:46  leonberp
-// fixed AsnInt bug
-//
-// Revision 1.28  2002/06/17 16:37:58  leonberp
-// fixed AsnInt conversion operator code
-//
-// Revision 1.27  2002/06/13 15:47:03  leonberp
-// added c_str() and length() dumped get()
-//
-// Revision 1.26  2002/06/13 15:06:26  leonberp
-// added get() to AsnInt
-//
-// Revision 1.25  2002/06/12 21:29:56  leonberp
-// fixed Linux compile error
-//
-// Revision 1.24  2002/06/12 20:43:26  leonberp
-// new AsnInt class
-//
-// Revision 1.23  2002/05/21 14:07:02  nicholar
-// Removed warnings
-//
-// Revision 1.22  2002/05/10 16:39:35  leonberp
-// latest changes for release 2.2
-// includes integrating asn-useful into C & C++ runtime library, the compiler changes that go along with that, SnaccException changes for C++ runtime and compiler
-//
-// Revision 1.21  2002/03/25 19:32:16  vracarl
-// added an AsnInt constructor to handle str to hex conversions - still need to add binary
-//
-// Revision 1.20  2002/03/01 14:07:40  vracarl
-// typo
-//
-// Revision 1.19  2002/02/28 21:47:27  vracarl
-// added an INDEFINATE_LEN check on the primitive
-//
-// Revision 1.18  2002/02/12 14:42:34  rwc
-// Updates to fix the BigInteger Get Signed call to properly pre-load 0xff.  (Thank you james.bishop at jrc.it).
-// Also some Linux/Unix fixes.
-//
-// Revision 1.17  2002/02/11 15:54:04  leonberp
-// changed the conversion and comparison operators so that they'll work with const objects
-//
-// Revision 1.16  2001/11/14 22:39:21  sfl
-// Updated logic to accept BigIntegerStr with 1 in upper-most bit on decode.
-// This allows our lib to be more forgiving on older messages, not throw
-// an exception when all else would succeed..
-//
-// Revision 1.15  2001/10/29 12:04:56  nicholar
-// Replaced memcpy with memmove where needed
-//
-// Revision 1.14  2001/10/09 13:52:30  rwc
-// Memory leak testing updates.
-//
-// Revision 1.13  2001/09/21 20:16:20  rwc
-// Partial updates to start integration of Sign/Encrypt/Sign message processing.
-//
-// Revision 1.12  2001/09/21 18:01:08  rwc
-// Updated to properly return BigIntegerString processed buffer if count matches
-// precisely to expected value.  Previously, it simply returned, without copying
-// the input to the output as expected.
-//
-// Revision 1.11  2001/08/29 22:04:18  leonberp
-// enchanced Clone() to allocate a new pointe AND COPY the object
-//
-// Revision 1.10  2001/08/27 21:25:41  leonberp
-// I 'const' enchanced CSM_Buffer and update all code that references it
-//
-// Revision 1.9  2001/08/24 15:39:24  leonberp
-// Enchanced Print() and PrintXML()  #if'd out PrintXMLSupport()
-//
-// Revision 1.8  2001/07/19 16:02:51  sfl
-// Yet more string.h updates.
-//
-// Revision 1.7  2001/07/12 19:33:37  leonberp
-// Changed namespace to SNACC and added compiler options: -ns and -nons.  Also removed dead code.
-//
-// Revision 1.6  2001/06/28 21:38:28  rwc
-// Updated to remove referneces to vdacerr, which originally replaced the cerr standard error output.
-// Updated all references in macros and source that printed to vdacerr.  All code now performs an
-// ASN_THROW(...) exception.
-//
-// Revision 1.5  2001/06/28 15:29:47  rwc
-// ADDED "SNACCASN" namespace definition to all SNACC data structures.
-// This should not affect most applications since we do not have any name
-// conflicts.
-// ALSO, combined all ASN primitive data type includes into asn-incl.h.
-//
-// Revision 1.4  2001/06/18 17:47:43  rwc
-// Updated to reflect newly added C++ Exception error handling, instead of "C" longjmp and setjmp calls.
-// Changes made to both the compiler and the SNACC C++ run-time library.
-//
-// Revision 1.3  2001/06/12 14:40:57  rwc
-// Updates to add the SFL CSM_BigIntegerStr multi-byte integer logic to
-// AsnInt for SNACC primitive support.  The code has been tested for full
-// backward compatibility for integer assign/compare, etc.
-//
-// Revision 1.2  2000/10/16 18:10:37  rwc
-// removed most warnings from C++-lib, some C-lib.
-//
-// Revision 1.1.1.1  2000/08/21 20:36:08  leonberp
-// First CVS Version of SNACC.
-//
-// Revision 1.7  1997/02/28 13:39:45  wan
-// Modifications collected for new version 1.3: Bug fixes, tk4.2.
-//
-// Revision 1.6  1995/09/07 18:55:50  rj
-// (unsigned) long int replaced by newly introduced Asn(U)IntType at a lot of places.
-// they shall provide 32 bit integer types on all platforms.
-//
-// Revision 1.5  1995/07/24  20:17:32  rj
-// #if TCL ... #endif wrapped into #if META ... #endif
-//
-// call constructor with additional pdu and create arguments.
-//
-// changed `_' to `-' in file names.
-//
-// Revision 1.4  1995/02/18  16:48:05  rj
-// denote a long if we want a long
-//
-// Revision 1.3  1994/10/08  04:18:23  rj
-// code for meta structures added (provides information about the generated code itself).
-//
-// code for Tcl interface added (makes use of the above mentioned meta code).
-//
-// virtual inline functions (the destructor, the Clone() function, BEnc(), BDec() and Print()) moved from inc/*.h to src/*.C because g++ turns every one of them into a static non-inline function in every file where the .h file gets included.
-//
-// made Print() const (and some other, mainly comparison functions).
-//
-// several `unsigned long int' turned into `size_t'.
-//
-// Revision 1.2  1994/08/28  10:01:12  rj
-// comment leader fixed.
-//
-// Revision 1.1  1994/08/28  09:20:59  rj
-// first check-in. for a list of changes to the snacc-1.1 distribution please refer to the ChangeLog.
-
-// Revision 2.0  6/4/01 RWC; VDA 
-// Added logic to accommodate real ASN.1 multi-byte integers, not just 4 byte.
+// NOTE: Numerous amounts of history were removed from this.  The complete
+//       change is available at https://github.com/esnacc/esnacc-ng
 
 #include "asn-incl.h"
 
@@ -328,158 +34,128 @@
 
 _BEGIN_SNACC_NAMESPACE
 
-
-
 #if META
 
-const AsnIntTypeDesc AsnInt::_desc (NULL, NULL, false, AsnTypeDesc::INTEGER, NULL, NULL);
+const AsnIntTypeDesc AsnInt::_desc (NULL, NULL, false, AsnTypeDesc::INTEGER,
+                                    NULL, NULL);
 
 const AsnTypeDesc *AsnInt::_getdesc() const
 {
-  return &_desc;
+    return &_desc;
 }
 
 #if TCL
 
-#define RETURN_NAME_INSTEAD_OF_VALUE	0
-
 int AsnInt::TclGetVal (Tcl_Interp *interp) const
 {
-#if RETURN_NAME_INSTEAD_OF_VALUE
-  const AsnNameDesc *n = _getdesc()->getnames();
-  if (n)
-    for (; n->name; n++)
-      if (n->value == value)
-      {
-	Tcl_SetResult (interp, n->name, TCL_STATIC);
-	return TCL_OK;
-      }
-#endif
-
-  char buf[32];
-  sprintf (buf, "%d", value);
-  Tcl_SetResult (interp, buf, TCL_VOLATILE);
-  return TCL_OK;
+    char buf[32];
+    sprintf (buf, "%d", value);
+    Tcl_SetResult (interp, buf, TCL_VOLATILE);
+    return TCL_OK;
 }
 
 int AsnInt::TclSetVal (Tcl_Interp *interp, const char *valstr)
 {
-  const AsnNameDesc *n = _getdesc()->getnames();
-  if (n)
-    for (; n->name; n++)
-      if (!strcmp (n->name, valstr))
-      {
-	value = n->value;
-	return TCL_OK;
-      }
+    const AsnNameDesc *n = _getdesc()->getnames();
+    if (n)
+        for (; n->name; n++)
+            if (!strcmp (n->name, valstr)) {
+                value = n->value;
+                return TCL_OK;
+            }
 
-  int valval;
-  if (Tcl_GetInt (interp, (char*)valstr, &valval) != TCL_OK)
-    return TCL_ERROR;
-  value = valval;
-  return TCL_OK;
+    int valval;
+    if (Tcl_GetInt (interp, (char*)valstr, &valval) != TCL_OK)
+        return TCL_ERROR;
+    value = valval;
+    return TCL_OK;
 }
 
 #endif /* TCL */
 #endif /* META */
 
 
-//RWC;6/4/01; newly added functionality (along with changes above).
-
-//------------------------------------------------------------------------------
-// class member definitions:
-
-//
-//
 AsnLen AsnInt::BEnc (AsnBuf &b) const
 {
     FUNC("AsnInt::BEnc");
     if( checkConstraints(NULL) != 0 )
-        throw ConstraintException("Integer not within constraints", STACK_ENTRY);
+        throw ConstraintException("Integer not within constraints",
+                                  STACK_ENTRY);
 
     AsnLen l=0;
     l = BEncContent (b);
     l += BEncDefLen (b, l);
-
     l += BEncTag1 (b, UNIV, PRIM, INTEGER_TAG_CODE);
     return l;
 }
 
-//
-//
 void AsnInt::BDec (const AsnBuf &b, AsnLen &bytesDecoded)
 {
-   FUNC("AsnInt::BDec");
+    FUNC("AsnInt::BDec");
 
-   AsnTag tag;
-   AsnLen elmtLen1;
+    AsnTag tag;
+    AsnLen elmtLen1;
 
-   if (((tag = BDecTag (b, bytesDecoded)) != MAKE_TAG_ID (UNIV, PRIM, INTEGER_TAG_CODE))
-     && (tag != MAKE_TAG_ID (UNIV, CONS, INTEGER_TAG_CODE)))
-   {
-    throw InvalidTagException(typeName(), tag, STACK_ENTRY);
-   }
-   elmtLen1 = BDecLen (b, bytesDecoded);
-   BDecContent (b, tag, elmtLen1, bytesDecoded);
+    if (((tag = BDecTag (b, bytesDecoded)) !=
+         MAKE_TAG_ID (UNIV, PRIM, INTEGER_TAG_CODE))
+        && (tag != MAKE_TAG_ID (UNIV, CONS, INTEGER_TAG_CODE))) {
+        throw InvalidTagException(typeName(), tag, STACK_ENTRY);
+    }
+    elmtLen1 = BDecLen (b, bytesDecoded);
+    BDecContent (b, tag, elmtLen1, bytesDecoded);
 }
 
-AsnLen  AsnInt::BEncContent (AsnBuf &b) const
+AsnLen AsnInt::BEncContent (AsnBuf &b) const
 {
-   b.PutSegRvs((char *)m_bytes, m_len);
-   return m_len;
+    b.PutSegRvs((char *)m_bytes, m_len);
+    return m_len;
 }
 
-void AsnInt::BDecContent (const AsnBuf &b, AsnTag, AsnLen elmtLen, AsnLen &bytesDecoded)
+void AsnInt::BDecContent (const AsnBuf &b, AsnTag, AsnLen elmtLen,
+                          AsnLen &bytesDecoded)
 {
-   FUNC("AsnInt::BDecContent()");
+    FUNC("AsnInt::BDecContent()");
 
-   if (elmtLen == INDEFINITE_LEN)
-      throw EXCEPT("indefinite length on primitive", DECODE_ERROR);
+    if (elmtLen == INDEFINITE_LEN)
+        throw EXCEPT("indefinite length on primitive", DECODE_ERROR);
 
-   delete[] m_bytes;
-   m_bytes = new unsigned char[elmtLen + 1];
-   m_len = elmtLen;
-   b.GetSeg((char *)m_bytes, elmtLen);
-   bytesDecoded += elmtLen;
+    delete[] m_bytes;
+    m_bytes = new unsigned char[elmtLen + 1];
+    m_len = elmtLen;
+    b.GetSeg((char *)m_bytes, elmtLen);
+    bytesDecoded += elmtLen;
 }
 
 AsnInt::AsnInt (const AsnInt &that)
+    : m_bytes(0), m_len(0)
 {
-   m_len = 0;
-   m_bytes = NULL;
-   operator=(that);
+    operator=(that);
 }
 
-AsnInt::AsnInt(const char *str, const size_t len, bool unsignedFlag) 
+AsnInt::AsnInt(const char *str, const size_t len, bool unsignedFlag)
+    : m_bytes(0), m_len(0)
 {
-   m_len = 0;
-   m_bytes = NULL;
-   storeDERInteger((const unsigned char *)str, len, unsignedFlag); 
+    storeDERInteger((const unsigned char *)str, len, unsignedFlag);
 }
 
-AsnInt::AsnInt(const AsnOcts &o, bool unsignedFlag) 
+AsnInt::AsnInt(const AsnOcts &o, bool unsignedFlag)
+    : m_bytes(0), m_len(0)
 {
-   m_len = 0;
-   m_bytes = NULL;
-   storeDERInteger(o.c_ustr(), o.Len(), unsignedFlag); 
+    storeDERInteger(o.c_ustr(), o.Len(), unsignedFlag);
 }
    
 // Construct an AsnInt from an integer value
 //
 AsnInt::AsnInt (AsnIntType val)
+    : m_bytes(NULL), m_len(0)
 {
-   if (val == 0)
-   {
-      m_len = 1;
-      m_bytes = new unsigned char[1];
-      *m_bytes = 0;
-   }
-   else
-   {
-      m_len = 0;
-      m_bytes = NULL;
-      Set(val);
-   }
+    if (!val) {
+        m_len = 1;
+        m_bytes = new unsigned char[1];
+        *m_bytes = 0;
+    } else {
+        Set(val);
+    }
 }
 
 // Construct an AsnInt from a null terminated character string.
@@ -491,222 +167,107 @@ AsnInt::AsnInt (AsnIntType val)
 //
 
 AsnInt::AsnInt(const char *str, bool unsignedFlag)
+    : m_bytes(NULL), m_len(0)
 {
- 
-   char radix=0;
+   FUNC("AsnInt::AsnInt(str,unsignedFlag)");
    unsigned length = strlen(str);
-   unsigned i = 0;
-
-   //std::basic_string<unsigned char> localBytes;
-   std::vector<unsigned char> localBytes;
-
-   AsnIntType l = 0;
-
-   FUNC("AsnInt::AsnInt");
-
-   m_len = 0;
-   m_bytes = NULL;
-
    if (length == 0)
-	   return;
+       return;
 
-	switch (str[length-1])
-	{
-	case 'h':
-	case 'H':
-		radix=16;
-		break;
-	}
+   const char *useStr = str;
+   char *errstr = NULL;
+   int radix = 0;
 
-   if (radix == 16)
-   {
-      if (str[0] != '\'' && str[length-2] != '\'')
-         return;
-      length -= 2;
-      i = 1;
+   if (str[length-1] == 'H' && str[0] == '\'' && str[length-2] == '\'') {
+       useStr = str+1;
+       radix = 16;
    }
-   else
-   {
-      if (strncmp("0x", str, 2) == 0)
-      {
-		 radix = 16;
-         i = 2;
-      }
-	  else  // assume it's a decimal
-	  {
-         // make sure the number isn't out of range
-		 if (((strlen(str) >= 11) && (str[0] != '-')) ||
-		    ((strlen(str) == 11) && (str[0] == '-') && (str[1] >= '2')&& (str[2] >= '1')) ||
-			((strlen(str) == 10) && (str[0] >= '2') && (str[1] >= '1')))
-		 {
-			throw EXCEPT("decimal string is too big to convert to an integer",
-				INTEGER_ERROR);
-		 }
 
-		 l = atol(str);
-		 Set(l);
-	  }
-   }
-   
-   if (radix == 16)
-   {
-		bool flag = false;
-		unsigned char prevDigit = 0;
-		for (; i<length; i++)
-		{
-			unsigned char digit;
-
-			if (str[i] >= '0' && str[i] <= '9')
-				digit = (unsigned char)(str[i] - '0');
-			else if (str[i] >= 'A' && str[i] <= 'F')
-				digit = (unsigned char)(str[i] - 'A' + 10);
-			else if (str[i] >= 'a' && str[i] <= 'f')
-				digit = (unsigned char)(str[i] - 'a' + 10);
-			else
-				return;
-
-		  if (!flag)
-		  {
-			  prevDigit = digit;
-			  flag = true;
-		  }
-		  else
-		  {
-			  prevDigit <<= 4;
-			  prevDigit |= digit;
-
-           //localBytes += prevDigit;
-			  localBytes.push_back(prevDigit);
-
-			  flag = false;
-		  }
-		}
-	   storeDERInteger(&localBytes[0], localBytes.size(), unsignedFlag);
+   AsnIntType t;
+   if (unsignedFlag) {
+       t = strtoul(useStr, &errstr, radix);
+   } else {
+       t = strtol(useStr, &errstr, radix);
    }
+
+   if ((errstr && *errstr == '\0') ||
+       !errstr ||
+       (*errstr == '\'' && radix == 16))
+       Set(t);
+
+   throw EXCEPT("UNKNOWN INPUT BYTES.", INTEGER_ERROR);
 }
 
 AsnInt::~AsnInt()
 {
-    if(m_bytes)
-        delete[] m_bytes;
+    delete [] m_bytes;
 }
 
 void AsnInt::storeDERInteger(const unsigned char *pData, long dataLen, bool unsignedFlag)
 {
-   
-   m_len = 0;
-   delete[] m_bytes;
-
-   /* IF the application generates an r,s,p,q,g or y value in which the
-    * first 9 bits are all set to 0, then the encoding software deletes the
-    * first octet from the octets to be encoded.  This rule is applied
-    * repeatedly to the remaining octets until the first 9 bits are not all
-    * set to 0.
-    */
-   if (unsignedFlag)
-   {
-	   // Check for leading nine bits all zero
-	   if (dataLen > 1)
-	   {
-		   while (dataLen > 1 &&  !( (pData[0] & 0xFF) || (pData[1] & 0x80)) )
-		   {
+    m_len = 0;
+    delete [] m_bytes;
+
+    /* IF the application generates an r,s,p,q,g or y value in which the
+     * first 9 bits are all set to 0, then the encoding software deletes the
+     * first octet from the octets to be encoded.  This rule is applied
+     * repeatedly to the remaining octets until the first 9 bits are not all
+     * set to 0.
+     */
+    if (unsignedFlag) {
+        // Check for leading nine bits all zero
+        if (dataLen > 1) {
+		   while (dataLen > 1 && !((pData[0] & 0xFF) || (pData[1] & 0x80))) {
 			   ++pData;
 			   --dataLen; 
 		   }
-	   }
-	   
-      m_bytes = new unsigned char[dataLen + 1];
-      m_len = dataLen;
-
-	   /* If the application generates a r,s,p,q,g, or y value in which the
-       * MSB is set to 1, THEN the software prepends a single octet in which
-       * all bits are set to 0.
-       */
-	   if (*pData & 0x80)
-	   {
-		   // Prepend a leading octet
-         memcpy(m_bytes + 1, pData, dataLen);
-         *m_bytes = '\0';
-         m_len++;
-	   }
-      else
-         memcpy(m_bytes, pData, dataLen);
-
-   }
-   /*
-    * ASN.1 rules state that the first 9 bits of an integer encoding can
-    * not be all ones or all zeros.
-    */
-   else if (dataLen > 1 )
-   {
-   /* check for first first 9 bits all ones
-       */
-	   while ((dataLen > 1) && (pData[0] == 0xFF) && (pData[1] & 0x80))
-	   {
+        }
+
+        m_bytes = new unsigned char[dataLen + 1];
+        m_len = dataLen;
+
+        /* If the application generates a r,s,p,q,g, or y value in which the
+         * MSB is set to 1, THEN the software prepends a single octet in which
+         * all bits are set to 0.
+         */
+        if (*pData & 0x80) {
+            // Prepend a leading octet
+            memcpy(m_bytes + 1, pData, dataLen);
+            *m_bytes = '\0';
+            m_len++;
+        } else
+            memcpy(m_bytes, pData, dataLen);
+    } else if (dataLen > 1 ) {
+
+        /* check for first first 9 bits all ones
+         */
+	   while ((dataLen > 1) && (pData[0] == 0xFF) && (pData[1] & 0x80)) {
 		   ++pData;
 		   --dataLen;
 	   }
 	   
 	   /* check for first 9 bits all zeros
-       */
-	   while ((dataLen > 1) && (pData[0] == 0) && ((pData[1] & 0x80) == 0))
-	   {
+        */
+	   while ((dataLen > 1) && (pData[0] == 0) && ((pData[1] & 0x80) == 0)) {
 		   ++pData;
 		   --dataLen;
 	   }
-      m_bytes = new unsigned char[dataLen + 1];
-      m_len = dataLen;
-      memcpy(m_bytes, pData, dataLen);
-   }
-}
-
-AsnInt & AsnInt::operator =(const AsnInt &that)
-{
-   if (this != &that)
-   {
-      m_len = that.m_len;
-      delete[] m_bytes;
-      m_bytes = new unsigned char[m_len];
-      memcpy(m_bytes, that.m_bytes, m_len);
-   }
-
-   return *this;
+       m_bytes = new unsigned char[dataLen + 1];
+       m_len = dataLen;
+       memcpy(m_bytes, pData, dataLen);
+    }
 }
 
-// Conversion operator for converting an AsnInt to an AsnIntType
-//
-AsnInt::operator AsnIntType() const
+AsnInt &AsnInt::operator =(const AsnInt &that)
 {
-   FUNC("AsnInt::operator AsnIntType");
-
-   AsnIntType iResult=0;
-
-   if (m_len > sizeof(AsnIntType))
-   {
-    throw EXCEPT("integer is too big for conversion to AsnIntType", INTEGER_ERROR);
-   }
-
-   // If big int is negative initialize result to -1
-   //
-   if ( (m_bytes[0] >> 7 == 1) )
-   {
-      iResult = -1;
-   }
-
-   if (m_len > 0)
-   {
-     /*
-      * write from buffer into AsnIntType
-      */
-     for (unsigned int i = 0; i < m_len; i++)
-         iResult = (iResult << 8) | (AsnUIntType)(m_bytes[i]);
-   }
-   else
-   {
-     iResult = 0;
-   }
+    if (this != &that) {
+        m_len = that.m_len;
+        delete [] m_bytes;
+        m_bytes = new unsigned char[m_len];
+        memcpy(m_bytes, that.m_bytes, m_len);
+    }
 
-   return iResult; 
+    return *this;
 }
 
 // Set AsnInt from a buffer.  Buffer is assumed to be a proper
@@ -714,7 +275,7 @@ AsnInt::operator AsnIntType() const
 //
 void AsnInt::Set (const unsigned char *pData, size_t len, bool unsignedFlag)
 {
-   storeDERInteger(pData, len, unsignedFlag);
+    storeDERInteger(pData, len, unsignedFlag);
 }
 
 // Set AsnInt from a AsnIntType
@@ -731,7 +292,8 @@ void AsnInt::Set(AsnIntType iIn)
    storeDERInteger(cTmp, sizeof(iIn), (iIn >= 0));
 }
 
-void AsnInt::getPadded(unsigned char *&bigIntDataOut, size_t &bigIntLen, const size_t padToSize) const
+void AsnInt::getPadded(unsigned char *&bigIntDataOut, size_t &bigIntLen,
+                       const size_t padToSize) const
 {
    FUNC("AsnInt::GetUnSignedBitExtendedData()");   
 
@@ -803,26 +365,24 @@ bool AsnInt::operator != (const AsnInt &o) const
 
 bool AsnInt::operator==(AsnIntType o) const
 {
-   if (m_len > sizeof(AsnIntType))
-		return false;
+    if (m_len > sizeof(AsnIntType))
+        return false;
 
-	// Convert this AsnInt to a normal integer
-	AsnIntType result = 0;
-	
-   if (m_len > 0)
-	{
-		// If the AsnInt is negative initialize the result to -1
-		if ((m_bytes[0] & 0x80) != 0)
-			result = -1;
+    // Convert this AsnInt to a normal integer
+    AsnIntType result = 0;
 
-      for (unsigned int i = 0; i < m_len; ++i)
-		{
-			result <<= 8;
-			result |= (unsigned char)m_bytes[i];
-		}
-   }
+    if (m_len > 0) {
+        // If the AsnInt is negative initialize the result to -1
+        if ((m_bytes[0] & 0x80) != 0)
+            result = -1;
+
+        for (unsigned int i = 0; i < m_len; ++i) {
+            result <<= 8;
+            result |= (unsigned char)m_bytes[i];
+        }
+    }
 
-  return (result == o);
+    return (result == o);
 }
 
 bool AsnInt::operator<(const AsnInt &o) const
@@ -840,34 +400,33 @@ bool AsnInt::operator<(const AsnInt &o) const
 
 void AsnInt::Print(std::ostream& os, unsigned short /*indent*/) const
 {
-   os << "'";
-   os.setf(std::ios::hex);
-   char buf[3];
-   buf[2] = '\0';
-   for (unsigned long i = 0; i < m_len; i++)
-   {
-        sprintf(buf, "%2.2x", (int)m_bytes[i]);
-        os << buf;
-   }        //END for all data.
-   os << "'H  -- \n";
-
-   os.unsetf(std::ios::hex);
-
+    try {
+        long l = toInteger<long>();
+        os << l << '\n';
+    } catch (SnaccException &e) {
+        os << "'";
+        std::ios_base::fmtflags flags = os.flags();
+        os.setf(std::ios::hex);
+        char buf[3] = {0};
+        for (unsigned long i = 0; i < m_len; i++) {
+            sprintf(buf, "%2.2x", (int)m_bytes[i]);
+            os << buf;
+        }
+        os << "'H  -- \n";
+        os.setf(flags);
+    }
 }
 
 void AsnInt::PrintXML(std::ostream &os, const char *lpszTitle) const
 {
-   if (lpszTitle)
-   {
-       os << "<" << lpszTitle; 
-       os << " type=\"INTEGER\">\n"; 
-   }
-   else
-   {
+   if (lpszTitle) {
+       os << "<" << lpszTitle << ">\n";
+   } else {
        os << "<INTEGER>\n"; 
    }
-   //RWC:os << "-"; 
+
    Print(os); 
+
    if (lpszTitle) 
        os << "</" << lpszTitle << ">\n"; 
    else
@@ -885,8 +444,7 @@ int AsnInt::checkConstraints (ConstraintFailList* pConstraintFails)const
     long ltemp= 0;
 	 const char* tmpptr = NULL;
 
-    if (m_len > sizeof(AsnIntType) && (numValueRanges > 0) )
-    {
+    if (m_len > sizeof(AsnIntType) && (numValueRanges > 0) ) {
         throw EXCEPT("Integer is out of constraint range", CONSTRAINT_ERROR);
     }
     
@@ -894,67 +452,57 @@ int AsnInt::checkConstraints (ConstraintFailList* pConstraintFails)const
 	{
         ltemp = *this;
         
-		for(count = 0; count< numValueRanges; count++)
-		{
+		for(count = 0; count< numValueRanges; count++) {
             tmpptr = NULL;
-			if(valueRanges[count].upperBoundExists == 1)
-			{
-                if( ( ltemp < valueRanges[count].lowerBound ) || ( ltemp > valueRanges[count].upperBound ) )
-                {
-                    tmpptr = ConstraintErrorStringList[ INTEGER_VALUE_RANGE ];
+			if(valueRanges[count].upperBoundExists == 1) {
+                if ((ltemp < valueRanges[count].lowerBound) ||
+                    (ltemp > valueRanges[count].upperBound)) {
+                    tmpptr = ConstraintErrorStringList[INTEGER_VALUE_RANGE];
                 }
-			}
-			else if(valueRanges[count].upperBoundExists == 2)
-			{
-                if( ltemp != valueRanges[count].lowerBound )
-                {
-                    tmpptr = ConstraintErrorStringList[ INTEGER_SINGLE_VALUE ];
+			} else if(valueRanges[count].upperBoundExists == 2) {
+                if (ltemp != valueRanges[count].lowerBound ) {
+                    tmpptr = ConstraintErrorStringList[INTEGER_SINGLE_VALUE];
                 }
-            }
-            else if(valueRanges[count].upperBoundExists == 0)
-			{
-                if( ltemp < valueRanges[count].lowerBound )
-                {
-                    tmpptr = ConstraintErrorStringList[ INTEGER_VALUE_RANGE ];
+            } else if(valueRanges[count].upperBoundExists == 0) {
+                if (ltemp < valueRanges[count].lowerBound) {
+                    tmpptr = ConstraintErrorStringList[INTEGER_VALUE_RANGE];
                 }
             }
 
-			if(tmpptr)
-			{
-				ptr += tmpptr;
-            }
-			else
-			{
+            if(tmpptr) {
+                ptr += tmpptr;
+            } else {
 				failed = 0;
 			}
 		}
+	} else {
+        failed = 0;
 	}
-	else
-	{
-		failed = 0;
+
+	if(failed && pConstraintFails != NULL) {
+        pConstraintFails->push_back(ptr);
 	}
 
-	if(failed)
-	{
-		if(pConstraintFails!=NULL)
-			pConstraintFails->push_back(ptr);
-	}	  
     return failed;
 }
 
 void AsnInt::putByte(long offset, unsigned char cByte)
 {
-		m_bytes[offset] = cByte;
-} 
+    FUNC("AsnInt::putByte");
+    if (offset < 0 ||
+        (m_len <= (unsigned long)offset)) {
+        throw EXCEPT("Invalid Offset", INTEGER_ERROR);
+    }
+    m_bytes[offset] = cByte;
+}
 
 void AsnInt::Allocate(long size)
 {
-	unsigned char* temp = new unsigned char[m_len + size];
-    if (m_len)          // RWC;
-    {                   // RWC;
-	    memcpy(temp, m_bytes, m_len);
+    unsigned char* temp = new unsigned char[m_len + size];
+    if (m_len) {
+        memcpy(temp, m_bytes, m_len);
 	    size += m_len;
-    }                   //RWC;
+    }
 
 	Clear();
 
diff --git a/cxx-lib/src/asn-null.cpp b/cxx-lib/src/asn-null.cpp
index 19389f4..0070625 100644
--- a/cxx-lib/src/asn-null.cpp
+++ b/cxx-lib/src/asn-null.cpp
@@ -151,15 +151,17 @@ void AsnNull::BDec (const AsnBuf &b, AsnLen &bytesDecoded)
 
 void AsnNull::Print(std::ostream& os, unsigned short /*indent*/) const
 {
-	os << "NULL";
+	os << "null";
 }
 
 void AsnNull::PrintXML (std::ostream &os, const char *lpszTitle) const
 {
-   os << "<NULL>"; 
-   if (lpszTitle) os << lpszTitle; 
-   os << "-"; 
-   Print(os); os << "</NULL>\n"; 
+    const char *tagName = typeName();
+    if (lpszTitle) tagName = lpszTitle;
+
+    os << "<" << tagName << ">";
+    Print(os);
+    os << "</" << tagName << ">\n";
 }
 
 #if META
diff --git a/cxx-lib/src/asn-octs.cpp b/cxx-lib/src/asn-octs.cpp
index 83856fa..22c41bc 100644
--- a/cxx-lib/src/asn-octs.cpp
+++ b/cxx-lib/src/asn-octs.cpp
@@ -86,12 +86,11 @@ void AsnOcts::Set (const char *str, size_t len)
 void AsnOcts::PrintXML (std::ostream &os, const char *lpszTitle,
                         const char *lpszType) const
 {
-   if (lpszType)
-     os << "<" << lpszType << ">";
-   else
-     os << "<OCTET_STRING>";
-   if (lpszTitle)
-      os << lpszTitle;
+    const char *tagName = "OCTET-STRING";
+    if (lpszType)
+        tagName = lpszType;
+    os << "<" << tagName << ">";
+
    os << "-";
    Print(os);
    //PrintXMLSupport(&os, ((AsnOcts *)this)->Access(), octetLen);
diff --git a/cxx-lib/src/asn-real.cpp b/cxx-lib/src/asn-real.cpp
index 5ea17ee..5d2784f 100644
--- a/cxx-lib/src/asn-real.cpp
+++ b/cxx-lib/src/asn-real.cpp
@@ -997,15 +997,16 @@ void AsnReal::BDec (const AsnBuf &b, AsnLen &bytesDecoded)
 
 void AsnReal::Print(std::ostream& os, unsigned short /*indent*/) const
 {
-	os << value;
+    os << value;
 }
 
 void AsnReal::PrintXML (std::ostream &os, const char *lpszTitle) const 
 {
-   os << "<REAL>"; 
-   if (lpszTitle) os << lpszTitle; 
-   os << "-"; 
-   Print(os); os << "</REAL>\n"; 
+    const char *tagName = typeName();
+    if (lpszTitle) tagName = lpszTitle;
+    os << "<" << tagName << ">\n";
+    Print(os);
+    os << "</" << tagName << ">\n";
 }
 
 
diff --git a/snacc.h b/snacc.h
index 8b66aca..d9732b0 100644
--- a/snacc.h
+++ b/snacc.h
@@ -82,15 +82,6 @@
 #  define RETURN_THIS_FOR_COMPILERS_WITHOUT_VOLATILE_FUNCTIONS
 #endif
 
-#if !BOOL_BUILTIN
-#ifndef true
-/* enum bool { false, true }; */
-/* the above looks elegant, but leads to anachronisms (<, ==, !=, ... return value of type int, not enum bool), therefore: */
-typedef int bool;
-enum { false, true };
-#endif
-#endif
-
 #else /* !__cplusplus */
 
 #ifndef FALSE
-- 
2.7.4



More information about the dev mailing list