[libxml2] os400: properly process SGML add in XMLCATALOG command.
- From: Daniel Veillard <veillard src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libxml2] os400: properly process SGML add in XMLCATALOG command.
- Date: Sun, 1 May 2016 10:45:11 +0000 (UTC)
commit c04785d5f55a9e6e12ca07643be6ff46866ece88
Author: Patrick Monnerat <pm datasphere ch>
Date: Tue Apr 21 16:56:54 2015 +0200
os400: properly process SGML add in XMLCATALOG command.
os400/xmlcatalog.cmd | 27 ++++++++++++++++++++---
os400/xmlcatlgcl.c | 57 +++++++++++++++++++++++++++++++++++++------------
2 files changed, 66 insertions(+), 18 deletions(-)
---
diff --git a/os400/xmlcatalog.cmd b/os400/xmlcatalog.cmd
index aac523f..92f0270 100644
--- a/os400/xmlcatalog.cmd
+++ b/os400/xmlcatalog.cmd
@@ -30,11 +30,18 @@
CHOICE('*STDOUT, *INSTMF or file path') +
PROMPT('Output stream file path')
+ /* Convert SGML to XML catalog. */
+
+ PARM KWD(CONVERT) TYPE(*CHAR) LEN(10) VARY(*YES *INT2) +
+ RSTD(*YES) SPCVAL((*YES '--convert') (*NO '')) +
+ EXPR(*YES) DFT(*NO) PMTCTL(TYPEXML) +
+ PROMPT('Convert SGML to XML catalog')
+
/* SGML super catalog update. */
PARM KWD(SUPERUPD) TYPE(*CHAR) LEN(17) VARY(*YES *INT2) +
SPCVAL((*YES '') (*NO '--no-super-update')) +
- EXPR(*YES) DFT(*YES) RSTD(*YES) +
+ EXPR(*YES) DFT(*YES) RSTD(*YES) PMTCTL(TYPESGML) +
PROMPT('Update the SGML super catalog')
/* Verbose/debug output. */
@@ -55,9 +62,9 @@
/* Values to add. */
- PARM KWD(ADD) TYPE(ADDELEM) MAX(10) +
+ PARM KWD(ADD) TYPE(XMLELEM) MAX(10) PMTCTL(TYPEXML) +
PROMPT('Add definition')
-ADDELEM: ELEM TYPE(*CHAR) LEN(16) VARY(*YES *INT2) DFT(*PUBLIC) +
+XMLELEM: ELEM TYPE(*CHAR) LEN(16) VARY(*YES *INT2) DFT(*PUBLIC) +
PROMPT('Entry type') +
EXPR(*YES) RSTD(*YES) SPCVAL( +
(*PUBLIC 'public') +
@@ -69,13 +76,19 @@ ADDELEM: ELEM TYPE(*CHAR) LEN(16) VARY(*YES *INT2) DFT(*PUBLIC) +
(*DELEGATESYSTEM 'delegateSystem') +
(*DELEGATEURI 'delegateURI') +
(*NEXTCATALOG 'nextCatalog') +
- (*FILENAME '') +
)
ELEM TYPE(*PNAME) LEN(256) VARY(*YES *INT2) EXPR(*YES) +
CASE(*MIXED) PROMPT('Original reference/file name')
ELEM TYPE(*PNAME) LEN(256) VARY(*YES *INT2) EXPR(*YES) +
CASE(*MIXED) PROMPT('Replacement entity URI')
+ PARM KWD(SGMLADD) TYPE(SGMLELEM) MAX(10) +
+ PMTCTL(TYPESGML) PROMPT('Add SGML definition')
+SGMLELEM: ELEM TYPE(*PNAME) LEN(256) VARY(*YES *INT2) EXPR(*YES) +
+ CASE(*MIXED) PROMPT('SGML catalog file name')
+ ELEM TYPE(*PNAME) LEN(256) VARY(*YES *INT2) EXPR(*YES) +
+ CASE(*MIXED) PROMPT('SGML definition')
+
/* Entities to resolve. */
PARM KWD(ENTITY) TYPE(*PNAME) LEN(256) VARY(*YES *INT2) +
@@ -91,3 +104,9 @@ ADDELEM: ELEM TYPE(*CHAR) LEN(16) VARY(*YES *INT2) DFT(*PUBLIC) +
(*DEFAULT '/etc/xml/catalog') +
(*NONE '') +
)
+
+
+ /* Conditional prompting. */
+
+TYPEXML: PMTCTL CTL(KIND) COND((*EQ ''))
+TYPESGML: PMTCTL CTL(KIND) COND((*NE ''))
diff --git a/os400/xmlcatlgcl.c b/os400/xmlcatlgcl.c
index c178b41..6f1e4ff 100644
--- a/os400/xmlcatlgcl.c
+++ b/os400/xmlcatlgcl.c
@@ -44,6 +44,13 @@ typedef struct {
paramlist(256, char) replace; /* vary2(256). */
} addelement;
+/* SGML add element list structure. */
+typedef struct {
+ short elcount; /* Element count (=3). */
+ paramlist(256, char) catalog; /* vary2(256). */
+ paramlist(256, char) ident; /* vary2(256). */
+} sgmladdelement;
+
/* Arguments from CL command. */
typedef struct {
@@ -51,10 +58,12 @@ typedef struct {
vary2 * instmf; /* Input catalog file name. */
vary2 * kind; /* Catalog kind. */
vary2 * outstmf; /* Output catalog file name. */
+ vary2 * convert; /* Convert SGML to XML. */
vary2 * superupd; /* --no-super-update. */
vary2 * verbose; /* Verbose output. */
paramlist(256 + 2, vary2) * delete; /* Identifiers to delete. */
paramlist(2, unsigned short) * add; /* Items to add. */
+ paramlist(2, unsigned short) * sgmladd; /* SGML items to add. */
paramlist(256 + 2, vary2) * resolve; /* Identifiers to resolve. */
paramlist(5000 + 2, vary2) * catalog; /* Additional catalog files. */
} arguments;
@@ -141,6 +150,7 @@ main(int argsc, arguments * args)
int i;
char c;
addelement * aelp;
+ sgmladdelement * saelp;
/* Specify additional catalogs. */
cmd.len = 0;
@@ -178,9 +188,6 @@ main(int argsc, arguments * args)
if (args->kind && args->kind->len)
vary4varg(&cmd, args->kind);
- if (args->superupd && args->superupd->len)
- vary4varg(&cmd, args->superupd);
-
if (args->verbose && args->verbose->len)
vary4varg(&cmd, args->verbose);
@@ -190,19 +197,39 @@ main(int argsc, arguments * args)
vary4vargquote(&cmd, &args->delete->item[i].param);
}
- if (args->add)
- for (i = 0; i < args->add->len; i++) {
- aelp = OFFSETBY(addelement,
- args->add, args->add->item[i].param);
- vary4arg(&cmd, "--add");
- if (((vary2 *) &aelp->type)->len) {
+ if (args->kind && args->kind->len) {
+ /* Process SGML-specific parameters. */
+ if (args->superupd && args->superupd->len)
+ vary4varg(&cmd, args->superupd);
+
+ if (args->sgmladd)
+ for (i = 0; i < args->sgmladd->len; i++) {
+ saelp = OFFSETBY(sgmladdelement, args->sgmladd,
+ args->sgmladd->item[i].param);
+ if (!((vary2 *) &saelp->catalog)->len)
+ continue;
+ vary4arg(&cmd, "--add");
+ vary4vargquote(&cmd, (vary2 *) &saelp->catalog);
+ vary4vargquote(&cmd, (vary2 *) &saelp->ident);
+ }
+ }
+ else {
+ /* Process XML-specific parameters. */
+ if (args->convert && args->convert->len)
+ vary4varg(&cmd, args->convert);
+
+ if (args->add)
+ for (i = 0; i < args->add->len; i++) {
+ aelp = OFFSETBY(addelement, args->add,
+ args->add->item[i].param);
+ if (!((vary2 *) &aelp->origin)->len)
+ continue;
+ vary4arg(&cmd, "--add");
vary4varg(&cmd, (vary2 *) &aelp->type);
vary4vargquote(&cmd, (vary2 *) &aelp->origin);
vary4vargquote(&cmd, (vary2 *) &aelp->replace);
}
- else
- vary4vargquote(&cmd, (vary2 *) &aelp->origin);
- }
+ }
/* Avoid INSTMF(*NEW) and OUTSMTF(*INSTMF). */
if (args->outstmf && args->outstmf->len && !args->outstmf->string[0])
@@ -233,11 +260,13 @@ main(int argsc, arguments * args)
/* If no input file create catalog, else specify the input file name. */
/* Specify the input file name: my be a dummy one. */
if (!args->instmf || !args->instmf->len) {
- vary4arg(&cmd, "--create");
+ vary4arg(&cmd, "--create -");
vary4arg(&cmd, ".dmyxmlcatalog");
}
- else
+ else {
+ vary4arg(&cmd, "-");
vary4vargquote(&cmd, args->instmf);
+ }
/* Query entities. */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]