adding SGML super catalog support adding one API and one flag --sgml to

* include/libxml/catalog.h catalog.c xmlcatalog.c: adding SGML
  super catalog support adding one API and one flag --sgml to
  xmlcatalog
Daniel
diff --git a/xmlcatalog.c b/xmlcatalog.c
index b293ec3..8063545 100644
--- a/xmlcatalog.c
+++ b/xmlcatalog.c
@@ -29,6 +29,7 @@
 #include <libxml/parser.h>
 
 static int shell = 0;
+static int sgml = 0;
 static int noout = 0;
 static int create = 0;
 static int add = 0;
@@ -198,17 +199,26 @@
 		}
 	    }
 	} else if (!strcmp(command, "add")) {
-	    if ((nbargs != 3) && (nbargs != 2)) {
-		printf("add requires 2 or 3 arguments\n");
+	    if (sgml) {
+		if (nbargs != 1) {
+		    printf("add requires 1 argument\n");
+		} else {
+		    ret = xmlCatalogAdd(BAD_CAST "sgmlcatalog", NULL,
+			                BAD_CAST argv[0]);
+		}
 	    } else {
-		if (argv[2] == NULL)
-		    ret = xmlCatalogAdd(BAD_CAST argv[0], NULL,
-			                BAD_CAST argv[1]);
-		else
-		    ret = xmlCatalogAdd(BAD_CAST argv[0], BAD_CAST argv[1],
-			                BAD_CAST argv[2]);
-		if (ret != 0)
-		    printf("add command failed\n");
+		if ((nbargs != 3) && (nbargs != 2)) {
+		    printf("add requires 2 or 3 arguments\n");
+		} else {
+		    if (argv[2] == NULL)
+			ret = xmlCatalogAdd(BAD_CAST argv[0], NULL,
+					    BAD_CAST argv[1]);
+		    else
+			ret = xmlCatalogAdd(BAD_CAST argv[0], BAD_CAST argv[1],
+					    BAD_CAST argv[2]);
+		    if (ret != 0)
+			printf("add command failed\n");
+		}
 	    }
 	} else if (!strcmp(command, "del")) {
 	    if (nbargs != 1) {
@@ -280,6 +290,7 @@
 static void usage(const char *name) {
     printf("Usage : %s [options] catalogfile entities...\n", name);
     printf("\tParse the catalog file and query it for the entities\n");
+    printf("\t--sgml : handle an SGML Super catalog\n");
     printf("\t--shell : run a shell allowing interactive queries\n");
     printf("\t--create : create a new catalog\n");
     printf("\t--add 'type' 'orig' 'replace' : add an entry\n");
@@ -317,6 +328,9 @@
 	    (!strcmp(argv[i], "--shell"))) {
 	    shell++;
             noout = 1;
+	} else if ((!strcmp(argv[i], "-sgml")) ||
+	    (!strcmp(argv[i], "--sgml"))) {
+	    sgml++;
 	} else if ((!strcmp(argv[i], "-create")) ||
 	    (!strcmp(argv[i], "--create"))) {
 	    create++;
@@ -325,7 +339,10 @@
 	    convert++;
 	} else if ((!strcmp(argv[i], "-add")) ||
 	    (!strcmp(argv[i], "--add"))) {
-	    i += 3;
+	    if (sgml)
+		i += 1;
+	    else
+		i += 3;
 	    add++;
 	} else if ((!strcmp(argv[i], "-del")) ||
 	    (!strcmp(argv[i], "--del"))) {
@@ -341,7 +358,10 @@
     for (i = 1; i < argc; i++) {
 	if ((!strcmp(argv[i], "-add")) ||
 	    (!strcmp(argv[i], "--add"))) {
-	    i += 3;
+	    if (sgml)
+		i += 1;
+	    else
+		i += 3;
 	    continue;
 	} else if ((!strcmp(argv[i], "-del")) ||
 	    (!strcmp(argv[i], "--del"))) {
@@ -350,8 +370,11 @@
 	} else if (argv[i][0] == '-')
 	    continue;
 	filename = argv[i];
-	ret = xmlLoadCatalog(argv[i]);
-	if ((ret < 0) && (create)) {
+	if (sgml)
+	    ret = xmlLoadSGMLSuperCatalog(argv[i]);
+	else
+	    ret = xmlLoadCatalog(argv[i]);
+	if ((!sgml) && (ret < 0) && (create)) {
 	    xmlCatalogAdd(BAD_CAST "catalog", BAD_CAST argv[i], NULL);
 	}
 	break;
@@ -369,16 +392,22 @@
 		continue;
 	    if ((!strcmp(argv[i], "-add")) ||
 		(!strcmp(argv[i], "--add"))) {
-		if ((argv[i + 3] == NULL) || (argv[i + 3][0] == 0))
-		    ret = xmlCatalogAdd(BAD_CAST argv[i + 1], NULL,
-			                BAD_CAST argv[i + 2]);
-		else
-		    ret = xmlCatalogAdd(BAD_CAST argv[i + 1],
-			                BAD_CAST argv[i + 2],
-			                BAD_CAST argv[i + 3]);
-		if (ret != 0)
-		    printf("add command failed\n");
-		i += 3;
+		if (sgml) {
+		    ret = xmlCatalogAdd(BAD_CAST "sgmlcatalog", NULL,
+			                BAD_CAST argv[i + 1]);
+		    i += 1;
+		} else {
+		    if ((argv[i + 3] == NULL) || (argv[i + 3][0] == 0))
+			ret = xmlCatalogAdd(BAD_CAST argv[i + 1], NULL,
+					    BAD_CAST argv[i + 2]);
+		    else
+			ret = xmlCatalogAdd(BAD_CAST argv[i + 1],
+					    BAD_CAST argv[i + 2],
+					    BAD_CAST argv[i + 3]);
+		    if (ret != 0)
+			printf("add command failed\n");
+		    i += 3;
+		}
 	    } else if ((!strcmp(argv[i], "-del")) ||
 		(!strcmp(argv[i], "--del"))) {
 		ret = xmlCatalogRemove(BAD_CAST argv[i + 1]);