diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /pkg/xtools/catquery/cqsqpars.x | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'pkg/xtools/catquery/cqsqpars.x')
-rw-r--r-- | pkg/xtools/catquery/cqsqpars.x | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/pkg/xtools/catquery/cqsqpars.x b/pkg/xtools/catquery/cqsqpars.x new file mode 100644 index 00000000..e2ab9c3c --- /dev/null +++ b/pkg/xtools/catquery/cqsqpars.x @@ -0,0 +1,135 @@ +include "cqdef.h" +include "cq.h" + + +# CQ_SQPAR -- Set the value of a query parameter by name. + +int procedure cq_sqpar (cq, name, valuestr) + +pointer cq #I the catalog descriptor +char name[ARB] #I the input query parameter name +char valuestr[ARB] #I the parameter value string + +pointer cc, sp, pname, tmpdic, pvalue +int i, parno, sz1, op1 +int strdic(), strlen(), cq_wrdstr(), gstrcpy() + +begin + # Check that the current catalog is defined. + if (CQ_CAT(cq) == NULL) + return (0) + if (CQ_CATNO(cq) < 1 || CQ_CATNO(cq) > CQ_NRECS(cq)) + return (0) + cc = CQ_CAT(cq) + + + # Allocate temporary space. + call smark (sp) + call salloc (pname, CQ_SZ_QPNAME, TY_CHAR) + call salloc (pvalue, CQ_SZ_QPVALUE, TY_CHAR) + + # Locate the parameter. + parno = strdic (name, Memc[pname], CQ_SZ_QPNAME, Memc[CQ_PQPNAMES(cc)]) + if (parno <= 0) { + call sfree (sp) + return (0) + } + + # Initalize the temporary string. + sz1 = strlen (Memc[CQ_PQPVALUES(cc)]) + CQ_SZ_QPVALUE + call malloc (tmpdic, sz1, TY_CHAR) + call strcpy ("|", Memc[tmpdic], sz1) + op1 = 2 + + + # Reformat the values string. + do i = 1, CQ_NQPARS(cc) { + if ((sz1 - op1 + 1) < (CQ_SZ_QPVALUE + 1)) { + sz1 = sz1 + SZ_LINE + call realloc (tmpdic, sz1, TY_CHAR) + } + if (i == parno) { + op1 = op1 + gstrcpy (valuestr, Memc[tmpdic+op1-1], + sz1 - op1 + 1) + op1 = op1 + gstrcpy ("|", Memc[tmpdic+op1-1], sz1 - op1 + 1) + } else if (cq_wrdstr (i, Memc[pvalue], CQ_SZ_QPNAME, + Memc[CQ_PQPVALUES(cc)]) > 0) { + op1 = op1 + gstrcpy (Memc[pvalue], Memc[tmpdic+op1-1], + sz1 - op1 + 1) + op1 = op1 + gstrcpy ("|", Memc[tmpdic+op1-1], sz1 - op1 + 1) + } + } + + # Update the values string. Leave as temp length for now. + call realloc (CQ_PQPVALUES(cc), op1 - 1, TY_CHAR) + call strcpy (Memc[tmpdic], Memc[CQ_PQPVALUES(cc)], op1 - 1) + + call mfree (tmpdic, TY_CHAR) + call sfree (sp) + + return (parno) +end + + +# CQ_SQPARN -- Set the value of a query parameter by number. + +int procedure cq_sqparn (cq, parno, valuestr) + +pointer cq #I the catalog descriptor +int parno #I the query parameter number +char valuestr[ARB] #I the parameter value string + +pointer cc, sp, pname, tmpdic, pvalue +int i, sz1, op1 +int strlen(), cq_wrdstr(), gstrcpy() + +begin + # Check that the current catalog is defined. + if (CQ_CAT(cq) == NULL) + return (0) + if (CQ_CATNO(cq) < 1 || CQ_CATNO(cq) > CQ_NRECS(cq)) + return (0) + cc = CQ_CAT(cq) + + if (parno < 1 || parno > CQ_NQPARS(cc)) + return (0) + + # Get some working space. + call smark (sp) + call salloc (pname, CQ_SZ_QPNAME, TY_CHAR) + call salloc (pvalue, CQ_SZ_QPVALUE, TY_CHAR) + + # Initialize the new dictionary. + sz1 = strlen (Memc[CQ_PQPVALUES(cc)]) + CQ_SZ_QPVALUE + call calloc (tmpdic, sz1, TY_CHAR) + call strcpy ("|", Memc[tmpdic], sz1) + op1 = 2 + + # Reformat the values string. + do i = 1, CQ_NQPARS(cc) { + if ((sz1 - op1 + 1) < (CQ_SZ_QPVALUE + 1)) { + sz1 = sz1 + SZ_LINE + call realloc (tmpdic, sz1, TY_CHAR) + } + if (i == parno) { + op1 = op1 + gstrcpy (valuestr, Memc[tmpdic+op1-1], + sz1 - op1 + 1) + op1 = op1 + gstrcpy ("|", Memc[tmpdic+op1-1], sz1 - op1 + 1) + } else if (cq_wrdstr (i, Memc[pvalue], CQ_SZ_QPNAME, + Memc[CQ_PQPVALUES(cc)]) > 0) { + op1 = op1 + gstrcpy (Memc[pvalue], Memc[tmpdic+op1-1], + sz1 - op1 + 1) + op1 = op1 + gstrcpy ("|", Memc[tmpdic+op1-1], sz1 - op1 + 1) + } + } + + # Update the values string. + call realloc (CQ_PQPVALUES(cc), op1, TY_CHAR) + call strcpy (Memc[tmpdic], Memc[CQ_PQPVALUES(cc)], op1 - 1) + + # Free memory. + call mfree (tmpdic, TY_CHAR) + call sfree (sp) + + return (parno) +end |