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 /noao/obsutil/src/ccdtime/ccddb.x | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'noao/obsutil/src/ccdtime/ccddb.x')
-rw-r--r-- | noao/obsutil/src/ccdtime/ccddb.x | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/noao/obsutil/src/ccdtime/ccddb.x b/noao/obsutil/src/ccdtime/ccddb.x new file mode 100644 index 00000000..e0f4dd1d --- /dev/null +++ b/noao/obsutil/src/ccdtime/ccddb.x @@ -0,0 +1,222 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +# General text database routines. + +# Symbol table definitions. +define LEN_INDEX 10 # Length of symtab index +define LEN_STAB 512 # Length of symtab +define SZ_SBUF 512 # Size of symtab string buffer +define SYMLEN 40 # Length of symbol structure +define SZ_DBVAL 79 # Size of database value string + +# Symbol table structure +define DBVAL Memc[P2C($1)] # Database value string + + +# DBOPEN -- Open database and store the requested information in symbol table. + +pointer procedure dbopen (dname, fname, kname, ename) + +char dname[ARB] #I Directory name +char fname[ARB] #I File name +char kname[ARB] #I Key name +char ename[ARB] #I Entry name +pointer db #O Database symbol table pointer + +int fd, found, open(), fscan(), nscan() +pointer sp, pname, name, key, str, sym +pointer stopen(), stenter() +bool streq(), strne() +errchk open, stopen, stenter, fscan, dberror + +begin + call smark (sp) + call salloc (pname, SZ_FNAME, TY_CHAR) + call salloc (name, SZ_LINE, TY_CHAR) + call salloc (key, SZ_FNAME, TY_CHAR) + call salloc (str, SZ_LINE, TY_CHAR) + + # Open database. + call sprintf (Memc[pname], SZ_FNAME, "%s%s") + call pargstr (dname) + call pargstr (fname) + fd = open (Memc[pname], READ_ONLY, TEXT_FILE) + + # Strip entry name whitespace and convert to lower case. + call strcpy (ename, Memc[name], SZ_LINE) + call xt_stripwhite (Memc[name]) + call strlwr (Memc[name]) + + # List entries in database. + if (Memc[name] == '?') { + Call printf ("Entries for %s in database %s:\n") + call pargstr (kname) + call pargstr (Memc[pname]) + while (fscan (fd) != EOF) { + call gargwrd (Memc[key], SZ_FNAME) + call gargwrd (Memc[str], SZ_LINE) + call gargwrd (Memc[str], SZ_LINE) + if (nscan()<3 || Memc[key]=='#' || strne (Memc[key], kname)) + next + call printf ("\t%s\n") + call pargstr (Memc[str]) + } + call close (fd) + call sfree (sp) + return (NULL) + } + + # Find entry. + found = 0 + while (fscan (fd) != EOF) { + call gargwrd (Memc[key], SZ_FNAME) + call gargwrd (Memc[str], SZ_LINE) + call gargwrd (Memc[str], SZ_LINE) + if (nscan()<3 || Memc[key]=='#' || strne (Memc[key], kname)) + next + found = 1 + call strlwr (Memc[str]) + if (streq (Memc[str], Memc[name])) { + found = 2 + break + } + } + + # Check if entry was found. + if (found != 2) { + call close (fd) + if (found != 1) + call dberror ("DBOPEN: Database entry not found", kname) + else + call dberror ("DBOPEN: Database entry not found", ename) + } + + # Create symbol table. + db = stopen (ename, LEN_INDEX, LEN_STAB, SZ_SBUF) + + # Read the file and enter the parameters in the symbol table. + sym = stenter (db, Memc[key], SYMLEN) + call strcpy (ename, DBVAL(sym), SZ_DBVAL) + while (fscan(fd) != EOF) { + call gargwrd (Memc[key], SZ_FNAME) + call gargwrd (Memc[str], SZ_LINE) + call gargwrd (Memc[str], SZ_LINE) + if (nscan()>0 && (streq(Memc[key],"end") || streq(Memc[key],kname))) + break + if (nscan() < 3 || Memc[key] == '#') + next + sym = stenter (db, Memc[key], SYMLEN) + call strcpy (Memc[str], DBVAL(sym), SZ_DBVAL) + } + + call close (fd) + call sfree (sp) + + return (db) +end + + +# DBCLOSE -- Close the database symbol table pointer. + +procedure dbclose (db) + +pointer db # Database symbol table pointer + +begin + if (db != NULL) + call stclose (db) +end + + +# DBGETD -- Get double database parameter. + +double procedure dbgetd (db, param, arg1, arg2) + +pointer db # Database symbol table pointer +char param[ARB] # Database parameter +char arg1[ARB], arg2[ARB] # Optional arguments + +char str[SZ_LINE] +int ip, ctod() +double dval +errchk dbgstr + +begin + call dbgstr (db, param, arg1, arg2, str, SZ_LINE) + + ip = 1 + if (ctod (str, ip, dval) <= 0) + call dberror ("DBGETD: Database parameter not double", param) + return (dval) +end + + +# DBGSTR -- Get string valued parameter. + +procedure dbgstr (db, param, arg1, arg2, str, maxchar) + +pointer db # Database symbol table pointer +char param[ARB] # Database parameter +char arg1[ARB], arg2[ARB] # Optional arguments +char str[maxchar] # Database parameter value +int maxchar # Maximum characters for string + +pointer sp, param1, sym, stfind() +errchk dberror + +begin + call smark (sp) + call salloc (param1, SZ_LINE, TY_CHAR) + + sym = NULL + if (arg1[1] != EOS && arg2[1] != EOS) { + call sprintf (Memc[param1], SZ_LINE, "%s(%s,%s)") + call pargstr (param) + call pargstr (arg1) + call pargstr (arg2) + sym = stfind (db, Memc[param1]) + if (sym == NULL) { + call sprintf (Memc[param1], SZ_LINE, "%s(%s,%s)") + call pargstr (param) + call pargstr (arg2) + call pargstr (arg1) + sym = stfind (db, Memc[param1]) + } + } + if (sym == NULL && arg1[1] != EOS) { + call sprintf (Memc[param1], SZ_LINE, "%s(%s)") + call pargstr (param) + call pargstr (arg1) + sym = stfind (db, Memc[param1]) + } + if (sym == NULL && arg2[1] != EOS) { + call sprintf (Memc[param1], SZ_LINE, "%s(%s)") + call pargstr (param) + call pargstr (arg2) + sym = stfind (db, Memc[param1]) + } + if (sym == NULL) + sym = stfind (db, param) + + call sfree (sp) + + if (sym == NULL) + call dberror ("DBGSTR: Database parameter not found", param) + call strcpy (DBVAL(sym), str, maxchar) +end + + +# DBERROR -- Print database error. + +procedure dberror (errstr, param) + +char errstr[ARB] # Error string +char param[ARB] # Parameter +char errmsg[SZ_LINE] # Error message + +begin + call sprintf (errmsg, SZ_LINE, "%s (%s)") + call pargstr (errstr) + call pargstr (param) + call error (1, errmsg) +end |