aboutsummaryrefslogtreecommitdiff
path: root/noao/astcat/src/debug/t_acqctest.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/astcat/src/debug/t_acqctest.x')
-rw-r--r--noao/astcat/src/debug/t_acqctest.x304
1 files changed, 304 insertions, 0 deletions
diff --git a/noao/astcat/src/debug/t_acqctest.x b/noao/astcat/src/debug/t_acqctest.x
new file mode 100644
index 00000000..e59fb80d
--- /dev/null
+++ b/noao/astcat/src/debug/t_acqctest.x
@@ -0,0 +1,304 @@
+include <pkg/cq.h>
+
+# T_ACQCTEST -- Test basic catalog database access and query procedures.
+
+procedure t_acqctest ()
+
+double dval1, dval2
+real width, rval1, rval2
+long lval1, lval2
+pointer cq, sp, reclist, res
+int i, ip, catno, nqpars, parno, nres, recptr, nchars, foffset, fsize
+int ftype, nfields, ival1, ival2
+short sval1, sval2
+char database[SZ_FNAME], record[SZ_LINE], ra[SZ_FNAME], dec[SZ_FNAME]
+char str[SZ_FNAME], catalog[SZ_LINE]
+char qpname[CQ_SZ_QPNAME], qpvalue[CQ_SZ_QPVALUE], qpunits[CQ_SZ_QPUNITS]
+char qpformats[CQ_SZ_QPFMTS]
+
+real clgetr()
+pointer cq_map(), cq_query()
+int cq_stati(), cq_statt(), cq_setcat(), cq_setcatn(), cq_nqpars()
+int cq_gqpar(), cq_gqparn(), cq_sqpar(), ctod(), cq_rstati()
+int cq_gnrecord(), cq_grecord(), cq_finfon(), cq_finfo(), cq_fname()
+int cq_foffset(), cq_fsize(), cq_ftype(), cq_gvali(), cq_hinfo()
+int cq_gvalc(), cq_gvald(), cq_gvalr(), cq_gvall(), cq_gvals(), cq_hinfon()
+bool streq()
+
+begin
+ # Get the database and record names.
+ call clgstr ("record", record, SZ_LINE)
+ call clgstr ("ra", ra, SZ_FNAME)
+ call clgstr ("dec", dec, SZ_FNAME)
+ width = clgetr ("width")
+ call clgstr ("database", database, SZ_FNAME)
+
+ # Map the database.
+ cq = cq_map (database, READ_ONLY)
+
+ # Print the database file name and number of records.
+ call cq_stats (cq, CQCATDB, database, SZ_FNAME)
+ call printf ("\nDatabase: %s Nrecs: %d\n\n")
+ call pargstr (database)
+ call pargi (cq_stati (cq, CQNRECS))
+
+ # Print the record list.
+ call printf ("Szreclist = %d characters\n")
+ call pargi (cq_stati (cq, CQSZRECLIST))
+
+ call smark (sp)
+ call salloc (reclist, cq_stati(cq, CQSZRECLIST), TY_CHAR)
+ if (cq_statt (cq, CQRECLIST, Memc[reclist], cq_stati(cq,
+ CQSZRECLIST)) <= 0)
+ Memc[reclist] = EOS
+ call printf ("%s")
+ call pargstr (Memc[reclist])
+ call sfree (sp)
+
+ # Print the current catalog name and number.
+ call cq_stats (cq, CQCATNAME, catalog, SZ_LINE)
+ call printf ("\nCurrent catalog: %s index: %d\n")
+ call pargstr (catalog)
+ call pargi (cq_stati (cq, CQCATNO))
+
+ # Set the current catalog by name.
+ catno = cq_setcat (cq, record)
+ call cq_stats (cq, CQCATNAME, catalog, SZ_LINE)
+ call printf ("\nCurrent catalog: %s index: %d\n")
+ call pargstr (catalog)
+ call pargi (cq_stati (cq, CQCATNO))
+
+ # Set the same catalog by number.
+ catno = cq_setcatn (cq, catno)
+ call cq_stats (cq, CQCATNAME, catalog, SZ_LINE)
+ call printf ("\nCurrent catalog: %s index: %d\n\n")
+ call pargstr (catalog)
+ call pargi (cq_stati (cq, CQCATNO))
+
+ # Set the query parameters. Don't worry about units in this case.
+ nqpars = cq_nqpars (cq)
+ do i = 1, nqpars {
+
+ # Get description of each query parameter.
+ parno = cq_gqparn (cq, i, qpname, CQ_SZ_QPNAME, qpvalue,
+ CQ_SZ_QPVALUE, qpunits, CQ_SZ_QPUNITS, qpformats, CQ_SZ_QPFMTS)
+ call printf ("parno: %d %s %s %s %s\n")
+ call pargi (parno)
+ call pargstr (qpname)
+ call pargstr (qpvalue)
+ call pargstr (qpunits)
+ call pargstr (qpformats)
+ parno = cq_gqpar (cq, qpname, qpname, CQ_SZ_QPNAME, qpvalue,
+ CQ_SZ_QPVALUE, qpunits, CQ_SZ_QPUNITS, qpformats, CQ_SZ_QPFMTS)
+ call printf ("parno: %d %s %s %s %s\n")
+ call pargi (parno)
+ call pargstr (qpname)
+ call pargstr (qpvalue)
+ call pargstr (qpunits)
+ call pargstr (qpformats)
+
+
+ # Set the astrometric parameters.
+ if (streq (qpname, "ra")) {
+ ip = 1
+ if (ctod (ra, ip, dval1) > 0) {
+ call sprintf (ra, SZ_FNAME, qpformats)
+ call pargd (dval1)
+ }
+ parno = cq_sqpar (cq, qpname, ra)
+ } else if (streq (qpname, "dec")) {
+ ip = 1
+ if (ctod (dec, ip, dval1) > 0) {
+ if (dval1 >= 0.0) {
+ #dec[1] = '+'
+ #call sprintf (dec[2], SZ_FNAME - 1, qpformats)
+ call sprintf (dec, SZ_FNAME, qpformats)
+ } else {
+ call sprintf (dec, SZ_FNAME, qpformats)
+ }
+ call pargd (dval1)
+ }
+ parno = cq_sqpar (cq, qpname, dec)
+ } else if (streq (qpname, "width")) {
+ call sprintf (str, SZ_FNAME, qpformats)
+ call pargr (width)
+ parno = cq_sqpar (cq, qpname, str)
+ } else if (streq (qpname, "radius")) {
+ call sprintf (str, SZ_FNAME, qpformats)
+ call pargr (width / 2.0)
+ parno = cq_sqpar (cq, qpname, str)
+ }
+
+ }
+ call flush (STDOUT)
+
+ # Send the query and get back the results.
+ res = cq_query (cq)
+ if (res == NULL)
+ return
+
+ call cq_rstats (res, CQRADDRESS, str, SZ_FNAME)
+ call printf ("\nraddress: %s\n")
+ call pargstr (str)
+ call cq_rstats (res, CQRQUERY, str, SZ_FNAME)
+ call printf ("rquery: %s\n")
+ call pargstr (str)
+ call cq_rstats (res, CQRQPNAMES, str, SZ_FNAME)
+ call printf ("rqpnames:%s\n")
+ call pargstr (str)
+ call cq_rstats (res, CQRQPVALUES, str, SZ_FNAME)
+ call printf ("rqpvalues:%s\n")
+ call pargstr (str)
+
+ # Get the number of header parameters.
+ nfields = cq_rstati (res, CQNHEADER)
+ call printf ("nheader = %d\n")
+ call pargi (nfields)
+
+ # Print the information for each field.
+ do i = 1, nfields {
+ if (cq_hinfon (res, i, qpname, CQ_SZ_QPNAME, record, SZ_LINE) <= 0)
+ next
+ call printf ("keyword: %d %s %s\n")
+ call pargi (i)
+ call pargstr (qpname)
+ call pargstr (record)
+ if (cq_hinfo (res, qpname, record, SZ_LINE) <= 0)
+ next
+ call printf ("keyword: %d %s %s\n")
+ call pargi (i)
+ call pargstr (qpname)
+ call pargstr (record)
+ }
+ call printf ("\n")
+
+ # Get the number of fields.
+ nfields = cq_rstati (res, CQNFIELDS)
+ call printf ("nfields = %d\n")
+ call pargi (nfields)
+
+ # Print the information for each field.
+ do i = 1, nfields {
+ if (cq_finfon (res, i, qpname, CQ_SZ_FNAME, foffset, fsize,
+ ftype, qpunits, CQ_SZ_FUNITS, qpformats, CQ_SZ_FFMTS) <= 0)
+ next
+ call printf ("field: %d %s %d %d %d %s %s\n")
+ call pargi (i)
+ call pargstr (qpname)
+ call pargi (foffset)
+ call pargi (fsize)
+ call pargi (ftype)
+ call pargstr (qpunits)
+ call pargstr (qpformats)
+ if (cq_finfo (res, qpname, foffset, fsize, ftype, qpunits,
+ CQ_SZ_FUNITS, qpformats, CQ_SZ_FFMTS) <= 0)
+ next
+ call printf ("field: %d %s %d %d %d %s %s\n")
+ call pargi (i)
+ call pargstr (qpname)
+ call pargi (foffset)
+ call pargi (fsize)
+ call pargi (ftype)
+ call pargstr (qpunits)
+ call pargstr (qpformats)
+ if (cq_fname (res, i, qpname, CQ_SZ_FNAME) <= 0)
+ next
+ foffset = cq_foffset (res, qpname)
+ fsize = cq_fsize (res, qpname)
+ ftype = cq_ftype (res, qpname)
+ call cq_funits (res, qpname, qpunits, CQ_SZ_FUNITS)
+ call cq_ffmts (res, qpname, qpformats, CQ_SZ_FFMTS)
+ call printf ("field: %d %s %d %d %d %s %s\n")
+ call pargi (i)
+ call pargstr (qpname)
+ call pargi (foffset)
+ call pargi (fsize)
+ call pargi (ftype)
+ call pargstr (qpunits)
+ call pargstr (qpformats)
+ }
+ call printf ("\n")
+
+ # Get the number of records.
+ nres = cq_rstati (res, CQRNRECS)
+ call printf ("nrecords = %d\n")
+ call pargi (nres)
+
+ # Loop through and print the records.
+ recptr = 0
+ while (recptr < nres) {
+ nchars = cq_gnrecord (res, record, SZ_LINE, recptr)
+ if (nchars == EOF)
+ break
+ call printf ("record %4d %4d %s")
+ call pargi (recptr)
+ call pargi (nchars)
+ call pargstr (record)
+ }
+
+ # Find and print records at random.
+ record[1] = EOS
+ nchars = cq_grecord (res, record, SZ_LINE, 1)
+ call printf ("\nrecord %4d %4d %s")
+ call pargi (1)
+ call pargi (nchars)
+ call pargstr (record)
+
+ record[1] = EOS
+ nchars = cq_grecord (res, record, SZ_LINE, (1 + nres) / 2)
+ call printf ("record %4d %4d %s")
+ call pargi ((1 + nres) / 2)
+ call pargi (nchars)
+ call pargstr (record)
+
+ record[1] = EOS
+ nchars = cq_grecord (res, record, SZ_LINE, nres)
+ call printf ("record %4d %4d %s")
+ call pargi (nres)
+ call pargi (nchars)
+ call pargstr (record)
+
+ # Loop through the records and decode the ra and dec fields as
+ # char, double precision, real precision, and integer fields.
+ call printf ("\nra dec\n")
+ do i = 1, nres {
+ call printf ("rec %d\n")
+ call pargi (i)
+ nchars = cq_gvalc (res, i, "ra", ra, SZ_FNAME)
+ nchars = cq_gvalc (res, i, "dec", dec, SZ_FNAME)
+ call printf (" %s %s\n")
+ call pargstr (ra)
+ call pargstr (dec)
+ nchars = cq_gvald (res, i, "ra", dval1)
+ nchars = cq_gvald (res, i, "dec", dval2)
+ call printf (" %h %h\n")
+ call pargd (dval1)
+ call pargd (dval2)
+ nchars = cq_gvalr (res, i, "ra", rval1)
+ nchars = cq_gvalr (res, i, "dec", rval2)
+ call printf (" %h %h\n")
+ call pargr (rval1)
+ call pargr (rval2)
+ nchars = cq_gvall (res, i, "ra", lval1)
+ nchars = cq_gvall (res, i, "dec", lval2)
+ call printf (" %h %h\n")
+ call pargl (lval1)
+ call pargl (lval2)
+ nchars = cq_gvali (res, i, "ra", ival1)
+ nchars = cq_gvali (res, i, "dec", ival2)
+ call printf (" %h %h\n")
+ call pargi (ival1)
+ call pargi (ival2)
+ nchars = cq_gvals (res, i, "ra", sval1)
+ nchars = cq_gvals (res, i, "dec", sval2)
+ call printf (" %h %h\n")
+ call pargs (sval1)
+ call pargs (sval2)
+ }
+
+ # Close the query descriptor.
+ call cq_rclose (res)
+
+ # Unmap the database.
+ call cq_unmap (cq)
+end