/* $Procedure ZZEKFRX ( EK, find record in index ) */ /* Subroutine */ int zzekfrx_(integer *handle, integer *segdsc, integer * coldsc, integer *recptr, integer *pos) { char cval[1024]; doublereal dval; integer ival; extern integer zzekrp2n_(integer *, integer *, integer *); integer unit; extern /* Subroutine */ int zzeklerc_(integer *, integer *, integer *, char *, integer *, logical *, integer *, integer *, ftnlen), zzeklerd_(integer *, integer *, integer *, doublereal *, integer * , logical *, integer *, integer *), zzekleri_(integer *, integer * , integer *, integer *, integer *, logical *, integer *, integer * ), chkin_(char *, ftnlen); integer recno, cvlen; logical found; integer dtype, cmplen; extern logical return_(void); logical isnull; extern /* Subroutine */ int dashlu_(integer *, integer *), setmsg_(char *, ftnlen), errfnm_(char *, integer *, ftnlen); integer prvptr; extern /* Subroutine */ int errint_(char *, integer *, ftnlen), sigerr_( char *, ftnlen), chkout_(char *, ftnlen), zzekrsc_(integer *, integer *, integer *, integer *, integer *, integer *, char *, logical *, logical *, ftnlen), zzekrsd_(integer *, integer *, integer *, integer *, integer *, doublereal *, logical *, logical *), zzekrsi_(integer *, integer *, integer *, integer *, integer * , integer *, logical *, logical *); /* $ Abstract */ /* Find the ordinal position of a specified record in a specified, */ /* indexed EK column. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* None. */ /* $ Keywords */ /* PRIVATE */ /* $ Declarations */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Column Descriptor Parameters */ /* ekcoldsc.inc Version 6 23-AUG-1995 (NJB) */ /* Note: The column descriptor size parameter CDSCSZ is */ /* declared separately in the include section CDSIZE$INC.FOR. */ /* Offset of column descriptors, relative to start of segment */ /* integer address range. This number, when added to the last */ /* integer address preceding the segment, yields the DAS integer */ /* base address of the first column descriptor. Currently, this */ /* offset is exactly the size of a segment descriptor. The */ /* parameter SDSCSZ, which defines the size of a segment descriptor, */ /* is declared in the include file eksegdsc.inc. */ /* Size of column descriptor */ /* Indices of various pieces of column descriptors: */ /* CLSIDX is the index of the column's class code. (We use the */ /* word `class' to distinguish this item from the column's data */ /* type.) */ /* TYPIDX is the index of the column's data type code (CHR, INT, DP, */ /* or TIME). The type is actually implied by the class, but it */ /* will frequently be convenient to look up the type directly. */ /* LENIDX is the index of the column's string length value, if the */ /* column has character type. A value of IFALSE in this element of */ /* the descriptor indicates that the strings have variable length. */ /* SIZIDX is the index of the column's element size value. This */ /* descriptor element is meaningful for columns with fixed-size */ /* entries. For variable-sized columns, this value is IFALSE. */ /* NAMIDX is the index of the base address of the column's name. */ /* IXTIDX is the data type of the column's index. IXTIDX */ /* contains a type value only if the column is indexed. For columns */ /* that are not indexed, the location IXTIDX contains the boolean */ /* value IFALSE. */ /* IXPIDX is a pointer to the column's index. IXTPDX contains a */ /* meaningful value only if the column is indexed. The */ /* interpretation of the pointer depends on the data type of the */ /* index. */ /* NFLIDX is the index of a flag indicating whether nulls are */ /* permitted in the column. The value at location NFLIDX is */ /* ITRUE if nulls are permitted and IFALSE otherwise. */ /* ORDIDX is the index of the column's ordinal position in the */ /* list of columns belonging to the column's parent segment. */ /* METIDX is the index of the column's integer metadata pointer. */ /* This pointer is a DAS integer address. */ /* The last position in the column descriptor is reserved. No */ /* parameter is defined to point to this location. */ /* End Include Section: EK Column Descriptor Parameters */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Query Limit Parameters */ /* ekqlimit.inc Version 3 16-NOV-1995 (NJB) */ /* Parameter MAXCON increased to 1000. */ /* ekqlimit.inc Version 2 01-AUG-1995 (NJB) */ /* Updated to support SELECT clause. */ /* ekqlimit.inc Version 1 07-FEB-1995 (NJB) */ /* These limits apply to character string queries input to the */ /* EK scanner. This limits are part of the EK system's user */ /* interface: the values should be advertised in the EK required */ /* reading document. */ /* Maximum length of an input query: MAXQRY. This value is */ /* currently set to twenty-five 80-character lines. */ /* Maximum number of columns that may be listed in the */ /* `order-by clause' of a query: MAXSEL. MAXSEL = 50. */ /* Maximum number of tables that may be listed in the `FROM */ /* clause' of a query: MAXTAB. */ /* Maximum number of relational expressions that may be listed */ /* in the `constraint clause' of a query: MAXCON. */ /* This limit applies to a query when it is represented in */ /* `normalized form': that is, the constraints have been */ /* expressed as a disjunction of conjunctions of relational */ /* expressions. The number of relational expressions in a query */ /* that has been expanded in this fashion may be greater than */ /* the number of relations in the query as orginally written. */ /* For example, the expression */ /* ( ( A LT 1 ) OR ( B GT 2 ) ) */ /* AND */ /* ( ( C NE 3 ) OR ( D EQ 4 ) ) */ /* which contains 4 relational expressions, expands to the */ /* equivalent normalized constraint */ /* ( ( A LT 1 ) AND ( C NE 3 ) ) */ /* OR */ /* ( ( A LT 1 ) AND ( D EQ 4 ) ) */ /* OR */ /* ( ( B GT 2 ) AND ( C NE 3 ) ) */ /* OR */ /* ( ( B GT 2 ) AND ( D EQ 4 ) ) */ /* which contains eight relational expressions. */ /* MXJOIN is the maximum number of tables that can be joined. */ /* MXJCON is the maximum number of join constraints allowed. */ /* Maximum number of order-by columns that may be used in the */ /* `order-by clause' of a query: MAXORD. MAXORD = 10. */ /* Maximum number of tokens in a query: 500. Tokens are reserved */ /* words, column names, parentheses, and values. Literal strings */ /* and time values count as single tokens. */ /* Maximum number of numeric tokens in a query: */ /* Maximum total length of character tokens in a query: */ /* Maximum length of literal string values allowed in queries: */ /* MAXSTR. */ /* End Include Section: EK Query Limit Parameters */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Segment Descriptor Parameters */ /* eksegdsc.inc Version 8 06-NOV-1995 (NJB) */ /* All `base addresses' referred to below are the addresses */ /* *preceding* the item the base applies to. This convention */ /* enables simplied address calculations in many cases. */ /* Size of segment descriptor. Note: the include file ekcoldsc.inc */ /* must be updated if this parameter is changed. The parameter */ /* CDOFF in that file should be kept equal to SDSCSZ. */ /* Index of the segment type code: */ /* Index of the segment's number. This number is the segment's */ /* index in the list of segments contained in the EK to which */ /* the segment belongs. */ /* Index of the DAS integer base address of the segment's integer */ /* meta-data: */ /* Index of the DAS character base address of the table name: */ /* Index of the segment's column count: */ /* Index of the segment's record count: */ /* Index of the root page number of the record tree: */ /* Index of the root page number of the character data page tree: */ /* Index of the root page number of the double precision data page */ /* tree: */ /* Index of the root page number of the integer data page tree: */ /* Index of the `modified' flag: */ /* Index of the `initialized' flag: */ /* Index of the shadowing flag: */ /* Index of the companion file handle: */ /* Index of the companion segment number: */ /* The next three items are, respectively, the page numbers of the */ /* last character, d.p., and integer data pages allocated by the */ /* segment: */ /* The next three items are, respectively, the page-relative */ /* indices of the last DAS word in use in the segment's */ /* last character, d.p., and integer data pages: */ /* Index of the DAS character base address of the column name list: */ /* The last descriptor element is reserved for future use. No */ /* parameter is defined to point to this location. */ /* End Include Section: EK Segment Descriptor Parameters */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Data Types */ /* ektype.inc Version 1 27-DEC-1994 (NJB) */ /* Within the EK system, data types of EK column contents are */ /* represented by integer codes. The codes and their meanings */ /* are listed below. */ /* Integer codes are also used within the DAS system to indicate */ /* data types; the EK system makes no assumptions about compatibility */ /* between the codes used here and those used in the DAS system. */ /* Character type: */ /* Double precision type: */ /* Integer type: */ /* `Time' type: */ /* Within the EK system, time values are represented as ephemeris */ /* seconds past J2000 (TDB), and double precision numbers are used */ /* to store these values. However, since time values require special */ /* treatment both on input and output, and since the `TIME' column */ /* has a special role in the EK specification and code, time values */ /* are identified as a type distinct from double precision numbers. */ /* End Include Section: EK Data Types */ /* $ Brief_I/O */ /* Variable I/O Description */ /* -------- --- -------------------------------------------------- */ /* HANDLE I File handle. */ /* SEGDSC I Segment descriptor. */ /* COLDSC I Column descriptor. */ /* RECPTR I Pointer to record to locate. */ /* POS O Ordinal position of record. */ /* $ Detailed_Input */ /* HANDLE is an EK file handle. The file may be open for */ /* reading or writing. */ /* SEGDSC is the segment descriptor of the segment */ /* containing the column to be searched. */ /* COLDSC is the column descriptor of the column to be */ /* searched. */ /* RECPTR is a pointer to the record whose ordinal position */ /* is to be found. */ /* $ Detailed_Output */ /* POS is the ordinal position in the specified column */ /* of the input record, where the order relation is */ /* specified by the column's index. */ /* $ Parameters */ /* None. */ /* $ Exceptions */ /* 1) If HANDLE is invalid, the error will be diagnosed by routines */ /* called by this routine. */ /* 2) If an I/O error occurs while reading the indicated */ /* file, the error will be diagnosed by routines called by this */ /* routine. */ /* $ Files */ /* See the EK Required Reading for a discussion of the EK file */ /* format. */ /* $ Particulars */ /* Various EK write operations require the capability of locating */ /* the index key that maps to a given record number. An example is */ /* updating a column's index to reflect deletion of a specified */ /* record: the key that maps to the record must be deleted. */ /* Locating this key is the inverse of the problem that the index */ /* is meant to solve. */ /* $ Examples */ /* See ZZEKIXDL. */ /* $ Restrictions */ /* None. */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* $ Version */ /* - SPICELIB Version 2.0.0, 31-MAY-2010 (NJB) */ /* Bug fix: substring bound out-of-range violation */ /* in reference to local variable CVAL has been */ /* corrected. This error could occur if the a */ /* class 3 column entry had length exceeding MAXSTR. */ /* - Beta Version 1.0.0, 10-OCT-1995 (NJB) */ /* -& */ /* SPICELIB functions */ /* Non-SPICELIB functions */ /* Local variables */ /* Standard SPICE error handling. */ if (return_()) { return 0; } else { chkin_("ZZEKFRX", (ftnlen)7); } /* Determine the data type of the column, and look up the value */ /* associated with RECPTR. */ dtype = coldsc[1]; if (dtype == 1) { zzekrsc_(handle, segdsc, coldsc, recptr, &c__1, &cvlen, cval, &isnull, &found, (ftnlen)1024); if (found && ! isnull) { cmplen = min(cvlen,1024); } else { cmplen = 0; } } else if (dtype == 2 || dtype == 4) { zzekrsd_(handle, segdsc, coldsc, recptr, &c__1, &dval, &isnull, & found); } else if (dtype == 3) { zzekrsi_(handle, segdsc, coldsc, recptr, &c__1, &ival, &isnull, & found); } else { dashlu_(handle, &unit); setmsg_("File = #; COLIDX = #. Unrecognized data type code # found i" "n descriptor.", (ftnlen)72); errfnm_("#", &unit, (ftnlen)1); errint_("#", &coldsc[8], (ftnlen)1); errint_("#", &dtype, (ftnlen)1); sigerr_("SPICE(ITEMNOTFOUND)", (ftnlen)19); chkout_("ZZEKFRX", (ftnlen)7); return 0; } if (! found) { /* We have a most heinous situation. We should always be able */ /* to find the value associated with a record. */ recno = zzekrp2n_(handle, &segdsc[1], recptr); dashlu_(handle, &unit); setmsg_("File = #; RECNO = #; COLIDX = #. Column entry was not found" ". This probably indicates a corrupted file or a bug in the " "EK code.", (ftnlen)127); errfnm_("#", &unit, (ftnlen)1); errint_("#", &recno, (ftnlen)1); errint_("#", &coldsc[8], (ftnlen)1); sigerr_("SPICE(ITEMNOTFOUND)", (ftnlen)19); chkout_("ZZEKFRX", (ftnlen)7); return 0; } /* Find the last column entry less than or equal to the one */ /* associated with the input record, where the order relation is */ /* dictionary ordering on (<column value>, <record number>) pairs. */ /* These ordered pairs are distinct, even if the column entries */ /* are not. Therefore, the ordinal position POS will actually be */ /* the ordinal position of our record. */ if (dtype == 1) { zzeklerc_(handle, segdsc, coldsc, cval, recptr, &isnull, pos, &prvptr, cmplen); } else if (dtype == 2 || dtype == 4) { zzeklerd_(handle, segdsc, coldsc, &dval, recptr, &isnull, pos, & prvptr); } else { /* The data type is INT. (We've already checked for invalid */ /* types.) */ zzekleri_(handle, segdsc, coldsc, &ival, recptr, &isnull, pos, & prvptr); } if (prvptr != *recptr) { /* Big problem. This should never happen. */ recno = zzekrp2n_(handle, &segdsc[1], recptr); dashlu_(handle, &unit); setmsg_("File = #; RECNO = #; COLIDX = #. Record that was last less" " than or equal to RECNO was not equal to RECNO. This probab" "ly indicates a corrupted file or a bug in the EK code.", ( ftnlen)174); errfnm_("#", &unit, (ftnlen)1); errint_("#", &recno, (ftnlen)1); errint_("#", &coldsc[8], (ftnlen)1); sigerr_("SPICE(ITEMNOTFOUND)", (ftnlen)19); chkout_("ZZEKFRX", (ftnlen)7); return 0; } chkout_("ZZEKFRX", (ftnlen)7); return 0; } /* zzekfrx_ */
/* $Procedure ZZEKSCMP ( EK, scalar value comparison ) */ logical zzekscmp_(integer *op, integer *handle, integer *segdsc, integer * coldsc, integer *row, integer *eltidx, integer *dtype, char *cval, doublereal *dval, integer *ival, logical *null, ftnlen cval_len) { /* System generated locals */ integer i__1; logical ret_val; /* Builtin functions */ integer i_len(char *, ftnlen); logical l_lt(char *, char *, ftnlen, ftnlen), l_gt(char *, char *, ftnlen, ftnlen); /* Local variables */ char eltc[1024]; doublereal eltd; integer elti, unit; extern /* Subroutine */ int chkin_(char *, ftnlen); integer cvlen; logical found, enull; extern logical failed_(void), matchi_(char *, char *, char *, char *, ftnlen, ftnlen, ftnlen, ftnlen); integer cmplen; doublereal numval; integer coltyp, strlen; extern /* Subroutine */ int setmsg_(char *, ftnlen), errint_(char *, integer *, ftnlen), sigerr_(char *, ftnlen), chkout_(char *, ftnlen), dashlu_(integer *, integer *), errfnm_(char *, integer *, ftnlen); integer rel; extern /* Subroutine */ int zzekrsc_(integer *, integer *, integer *, integer *, integer *, integer *, char *, logical *, logical *, ftnlen), zzekrsd_(integer *, integer *, integer *, integer *, integer *, doublereal *, logical *, logical *), zzekrsi_(integer * , integer *, integer *, integer *, integer *, integer *, logical * , logical *); /* $ Abstract */ /* Compare a specified scalar EK column entry with a scalar value. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* EK */ /* $ Keywords */ /* PRIVATE */ /* EK */ /* $ Declarations */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Column Descriptor Parameters */ /* ekcoldsc.inc Version 6 23-AUG-1995 (NJB) */ /* Note: The column descriptor size parameter CDSCSZ is */ /* declared separately in the include section CDSIZE$INC.FOR. */ /* Offset of column descriptors, relative to start of segment */ /* integer address range. This number, when added to the last */ /* integer address preceding the segment, yields the DAS integer */ /* base address of the first column descriptor. Currently, this */ /* offset is exactly the size of a segment descriptor. The */ /* parameter SDSCSZ, which defines the size of a segment descriptor, */ /* is declared in the include file eksegdsc.inc. */ /* Size of column descriptor */ /* Indices of various pieces of column descriptors: */ /* CLSIDX is the index of the column's class code. (We use the */ /* word `class' to distinguish this item from the column's data */ /* type.) */ /* TYPIDX is the index of the column's data type code (CHR, INT, DP, */ /* or TIME). The type is actually implied by the class, but it */ /* will frequently be convenient to look up the type directly. */ /* LENIDX is the index of the column's string length value, if the */ /* column has character type. A value of IFALSE in this element of */ /* the descriptor indicates that the strings have variable length. */ /* SIZIDX is the index of the column's element size value. This */ /* descriptor element is meaningful for columns with fixed-size */ /* entries. For variable-sized columns, this value is IFALSE. */ /* NAMIDX is the index of the base address of the column's name. */ /* IXTIDX is the data type of the column's index. IXTIDX */ /* contains a type value only if the column is indexed. For columns */ /* that are not indexed, the location IXTIDX contains the boolean */ /* value IFALSE. */ /* IXPIDX is a pointer to the column's index. IXTPDX contains a */ /* meaningful value only if the column is indexed. The */ /* interpretation of the pointer depends on the data type of the */ /* index. */ /* NFLIDX is the index of a flag indicating whether nulls are */ /* permitted in the column. The value at location NFLIDX is */ /* ITRUE if nulls are permitted and IFALSE otherwise. */ /* ORDIDX is the index of the column's ordinal position in the */ /* list of columns belonging to the column's parent segment. */ /* METIDX is the index of the column's integer metadata pointer. */ /* This pointer is a DAS integer address. */ /* The last position in the column descriptor is reserved. No */ /* parameter is defined to point to this location. */ /* End Include Section: EK Column Descriptor Parameters */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Operator Codes */ /* ekopcd.inc Version 1 30-DEC-1994 (NJB) */ /* Within the EK system, operators used in EK queries are */ /* represented by integer codes. The codes and their meanings are */ /* listed below. */ /* Relational expressions in EK queries have the form */ /* <column name> <operator> <value> */ /* For columns containing numeric values, the operators */ /* EQ, GE, GT, LE, LT, NE */ /* may be used; these operators have the same meanings as their */ /* Fortran counterparts. For columns containing character values, */ /* the list of allowed operators includes those in the above list, */ /* and in addition includes the operators */ /* LIKE, UNLIKE */ /* which are used to compare strings to a template. In the character */ /* case, the meanings of the parameters */ /* GE, GT, LE, LT */ /* match those of the Fortran lexical functions */ /* LGE, LGT, LLE, LLT */ /* The additional unary operators */ /* ISNULL, NOTNUL */ /* are used to test whether a value of any type is null. */ /* End Include Section: EK Operator Codes */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Query Limit Parameters */ /* ekqlimit.inc Version 3 16-NOV-1995 (NJB) */ /* Parameter MAXCON increased to 1000. */ /* ekqlimit.inc Version 2 01-AUG-1995 (NJB) */ /* Updated to support SELECT clause. */ /* ekqlimit.inc Version 1 07-FEB-1995 (NJB) */ /* These limits apply to character string queries input to the */ /* EK scanner. This limits are part of the EK system's user */ /* interface: the values should be advertised in the EK required */ /* reading document. */ /* Maximum length of an input query: MAXQRY. This value is */ /* currently set to twenty-five 80-character lines. */ /* Maximum number of columns that may be listed in the */ /* `order-by clause' of a query: MAXSEL. MAXSEL = 50. */ /* Maximum number of tables that may be listed in the `FROM */ /* clause' of a query: MAXTAB. */ /* Maximum number of relational expressions that may be listed */ /* in the `constraint clause' of a query: MAXCON. */ /* This limit applies to a query when it is represented in */ /* `normalized form': that is, the constraints have been */ /* expressed as a disjunction of conjunctions of relational */ /* expressions. The number of relational expressions in a query */ /* that has been expanded in this fashion may be greater than */ /* the number of relations in the query as orginally written. */ /* For example, the expression */ /* ( ( A LT 1 ) OR ( B GT 2 ) ) */ /* AND */ /* ( ( C NE 3 ) OR ( D EQ 4 ) ) */ /* which contains 4 relational expressions, expands to the */ /* equivalent normalized constraint */ /* ( ( A LT 1 ) AND ( C NE 3 ) ) */ /* OR */ /* ( ( A LT 1 ) AND ( D EQ 4 ) ) */ /* OR */ /* ( ( B GT 2 ) AND ( C NE 3 ) ) */ /* OR */ /* ( ( B GT 2 ) AND ( D EQ 4 ) ) */ /* which contains eight relational expressions. */ /* MXJOIN is the maximum number of tables that can be joined. */ /* MXJCON is the maximum number of join constraints allowed. */ /* Maximum number of order-by columns that may be used in the */ /* `order-by clause' of a query: MAXORD. MAXORD = 10. */ /* Maximum number of tokens in a query: 500. Tokens are reserved */ /* words, column names, parentheses, and values. Literal strings */ /* and time values count as single tokens. */ /* Maximum number of numeric tokens in a query: */ /* Maximum total length of character tokens in a query: */ /* Maximum length of literal string values allowed in queries: */ /* MAXSTR. */ /* End Include Section: EK Query Limit Parameters */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Segment Descriptor Parameters */ /* eksegdsc.inc Version 8 06-NOV-1995 (NJB) */ /* All `base addresses' referred to below are the addresses */ /* *preceding* the item the base applies to. This convention */ /* enables simplied address calculations in many cases. */ /* Size of segment descriptor. Note: the include file ekcoldsc.inc */ /* must be updated if this parameter is changed. The parameter */ /* CDOFF in that file should be kept equal to SDSCSZ. */ /* Index of the segment type code: */ /* Index of the segment's number. This number is the segment's */ /* index in the list of segments contained in the EK to which */ /* the segment belongs. */ /* Index of the DAS integer base address of the segment's integer */ /* meta-data: */ /* Index of the DAS character base address of the table name: */ /* Index of the segment's column count: */ /* Index of the segment's record count: */ /* Index of the root page number of the record tree: */ /* Index of the root page number of the character data page tree: */ /* Index of the root page number of the double precision data page */ /* tree: */ /* Index of the root page number of the integer data page tree: */ /* Index of the `modified' flag: */ /* Index of the `initialized' flag: */ /* Index of the shadowing flag: */ /* Index of the companion file handle: */ /* Index of the companion segment number: */ /* The next three items are, respectively, the page numbers of the */ /* last character, d.p., and integer data pages allocated by the */ /* segment: */ /* The next three items are, respectively, the page-relative */ /* indices of the last DAS word in use in the segment's */ /* last character, d.p., and integer data pages: */ /* Index of the DAS character base address of the column name list: */ /* The last descriptor element is reserved for future use. No */ /* parameter is defined to point to this location. */ /* End Include Section: EK Segment Descriptor Parameters */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Data Types */ /* ektype.inc Version 1 27-DEC-1994 (NJB) */ /* Within the EK system, data types of EK column contents are */ /* represented by integer codes. The codes and their meanings */ /* are listed below. */ /* Integer codes are also used within the DAS system to indicate */ /* data types; the EK system makes no assumptions about compatibility */ /* between the codes used here and those used in the DAS system. */ /* Character type: */ /* Double precision type: */ /* Integer type: */ /* `Time' type: */ /* Within the EK system, time values are represented as ephemeris */ /* seconds past J2000 (TDB), and double precision numbers are used */ /* to store these values. However, since time values require special */ /* treatment both on input and output, and since the `TIME' column */ /* has a special role in the EK specification and code, time values */ /* are identified as a type distinct from double precision numbers. */ /* End Include Section: EK Data Types */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Template Matching Wild Characters */ /* ekwild.inc Version 1 16-JAN-1995 (NJB) */ /* Within the EK system, templates used for pattern matching */ /* are those accepted by the SPICELIB routine MATCHW. MATCHW */ /* accepts two special characters: one representing wild */ /* strings and one representing wild characters. This include */ /* file defines those special characters for use within the EK */ /* system. */ /* Wild string symbol: this character matches any string. */ /* Wild character symbol: this character matches any character. */ /* End Include Section: EK Template Matching Wild Characters */ /* $ Brief_I/O */ /* Variable I/O Description */ /* -------- --- -------------------------------------------------- */ /* OP I Relational operator code. */ /* HANDLE I EK file handle. */ /* SEGDSC I Segment descriptor. */ /* COLDSC I Column descriptor. */ /* ROW I ID of row containing column entry to compare. */ /* ELTIDX I Index of element in array-valued column entry. */ /* DTYPE I Data type of input value. */ /* CVAL I Character string to compare with column entry. */ /* DVAL I D.p. value to compare with column entry. */ /* IVAL I Integer value to compare with column entry. */ /* NULL I Flag indicating whether scalar is null. */ /* The function returns .TRUE. if and only if the specified column */ /* entry and input value of the corresponding data type satisfy the */ /* relation specified by the input argument OP. */ /* $ Detailed_Input */ /* OP is an integer code representing a binary relational */ /* operator. The possible values of OP are the */ /* parameters */ /* EQ */ /* GE */ /* GT */ /* LE */ /* LIKE */ /* LT */ /* NE */ /* ISNULL */ /* NOTNUL */ /* HANDLE is an EK file handle. The file may be open for */ /* reading or writing. */ /* SEGDSC is the EK segment descriptor of the column entry */ /* to be compared. */ /* COLDSC is an EK column descriptor for the column */ /* containing the entry to be compared. */ /* ROW is the identifier of the row containing the column */ /* entry to be compared. Note that these identifiers */ /* are polymorphic: their meaning is a function of */ /* the class of column that contains the entry of */ /* interest. */ /* ELTIDX is the index of the column entry element to be */ /* compared, if the column is array-valued. ELTIDX */ /* is ignored for scalar columns. */ /* DTYPE is the data type of the input scalar value. */ /* CVAL, */ /* DVAL, */ /* IVAL are, respectively, character, double precision, */ /* and integer scalar variables. The column entry */ /* is compared against whichever of these has the */ /* same data type as the entry; the other two */ /* variables are ignored. If the data type of the */ /* column entry is TIME, the entry is compared with */ /* the variable DVAL. */ /* NULL */ /* $ Detailed_Output */ /* The function returns .TRUE. if and only if the specified column */ /* entry and input value of the corresponding data type satisfy the */ /* relation specified by the input argument OP. */ /* If the specified column entry is null, it is considered to */ /* precede all non-null values, and the logical value of the */ /* expression */ /* <column element> OP <value> */ /* is determined accordingly. Null character values do not satisfy */ /* the relation */ /* <null column element> LIKE <character value> */ /* for any character value. */ /* $ Parameters */ /* Within the EK system, relational operators used in EK queries are */ /* represented by integer codes. The codes and their meanings are */ /* listed below. */ /* Relational expressions in EK queries have the form */ /* <column name> <operator> <value> */ /* For columns containing numeric values, the operators */ /* EQ, GE, GT, LE, LT, NE */ /* may be used; these operators have the same meanings as their */ /* Fortran counterparts. For columns containing character values, */ /* the list of allowed operators includes those in the above list, */ /* and in addition includes the operator */ /* LIKE */ /* which is used to compare strings to a template. In the character */ /* case, the meanings of the parameters */ /* GE, GT, LE, LT */ /* match those of the Fortran lexical functions */ /* LGE, LGT, LLE, LLT */ /* Null values are considered to precede all non-null values. */ /* $ Exceptions */ /* 1) If the input file handle is invalid, the error will be */ /* diagnosed by routines called by this routine. */ /* The function value is .FALSE. in this case. */ /* 2) If an I/O error occurs while attempting to find the address */ /* range of the specified column entry element, the error will */ /* be diagnosed by routines called by this routine. The */ /* function value is .FALSE. in this case. */ /* 3) If any of SEGDSC, COLDSC, or ROW are invalid, this routine */ /* may fail in unpredictable, but possibly spectacular, ways. */ /* Except as described in this header section, no attempt is */ /* made to handle these errors. */ /* 4) If the data type code in the input column descriptor is not */ /* recognized, the error SPICE(INVALIDDATATYPE) is signalled. */ /* The function value is .FALSE. in this case. */ /* 5) If the specified column entry cannot be found, the error */ /* SPICE(INVALIDINDEX) is signalled. The function value is */ /* .FALSE. in this case. */ /* 6) If the relational operator code OP is not recognized, the */ /* error SPICE(UNNATURALRELATION) is signalled. The function */ /* value is .FALSE. in this case. */ /* $ Files */ /* See the description of the argument HANDLE in $Detailed_Input. */ /* $ Particulars */ /* This routine is an EK utility intended to centralize a frequently */ /* performed comparison operation. */ /* $ Examples */ /* See ZZEKRMCH. */ /* $ Restrictions */ /* 1) This routine must execute quickly. Therefore, it checks in */ /* only if it detects an error. If an error is signalled by a */ /* routine called by this routine, this routine will not appear */ /* in the SPICELIB traceback display. Also, in the interest */ /* of speed, this routine does not test the value of the SPICELIB */ /* function RETURN upon entry. */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* $ Version */ /* - SPICELIB Version 1.2.0, 31-MAY-2009 (NJB) */ /* Bug fix: routine failed to account for the possibility */ /* that scalar string column entries can have unlimited */ /* length. Now at most the first MAXSTR characters of such */ /* an entry are used in comparisons. */ /* - SPICELIB Version 1.1.0, 21-DEC-2001 (NJB) */ /* Bug fix: routine now indicates "no match" when operator */ /* is LIKE or UNLIKE and column entry is null. */ /* - SPICELIB Version 1.0.0, 17-OCT-1995 (NJB) */ /* -& */ /* SPICELIB functions */ /* Local variables */ /* Use discovery check-in for speed. */ /* The function value defaults to .FALSE. */ ret_val = FALSE_; /* Look up the specified column element. */ coltyp = coldsc[1]; if (coltyp == 1) { /* We'll use at most the first MAXSTR characters of the input */ /* string. */ /* Computing MIN */ i__1 = i_len(cval, cval_len); cvlen = min(i__1,1024); /* Fetch the column entry to be compared. Note that ROW */ /* is a polymorphic identifier. See ZZEKRSC for details */ /* on how ROW is used. */ zzekrsc_(handle, segdsc, coldsc, row, eltidx, &strlen, eltc, &enull, & found, (ftnlen)1024); if (failed_()) { /* Don't check out here because we haven't checked in. */ return ret_val; } /* Let CMPLEN be the string length to use in comparisons. */ if (found && ! enull) { cmplen = min(strlen,1024); } else { cmplen = 0; } } else if (coltyp == 2 || coltyp == 4) { zzekrsd_(handle, segdsc, coldsc, row, eltidx, &eltd, &enull, &found); } else if (coltyp == 3) { zzekrsi_(handle, segdsc, coldsc, row, eltidx, &elti, &enull, &found); } else { chkin_("ZZEKSCMP", (ftnlen)8); setmsg_("Data type code # not recognized.", (ftnlen)32); errint_("#", &coltyp, (ftnlen)1); sigerr_("SPICE(INVALIDDATATYPE)", (ftnlen)22); chkout_("ZZEKSCMP", (ftnlen)8); return ret_val; } if (! found) { dashlu_(handle, &unit); chkin_("ZZEKSCMP", (ftnlen)8); setmsg_("EK = #; COLIDX = #; ROW = #; ELTIDX = #. Column entry eleme" "nt was not found.", (ftnlen)76); errfnm_("#", &unit, (ftnlen)1); errint_("#", &coldsc[8], (ftnlen)1); errint_("#", row, (ftnlen)1); errint_("#", eltidx, (ftnlen)1); sigerr_("SPICE(INVALIDINDEX)", (ftnlen)19); chkout_("ZZEKSCMP", (ftnlen)8); return ret_val; } /* Handle the ISNULL and NOTNUL operators, if perchance we see them. */ if (*op == 9) { ret_val = enull; return ret_val; } else if (*op == 10) { ret_val = ! enull; return ret_val; } /* Find the order relation that applies to the input values. */ /* Null values precede all others. */ if (enull) { if (*null) { rel = 1; } else { rel = 5; } } else if (*null) { if (enull) { rel = 1; } else { rel = 3; } } else { /* Compare the value we looked up with the input scalar value. */ if (coltyp == 1) { if (*dtype != 1) { chkin_("ZZEKSCMP", (ftnlen)8); setmsg_("Column type is #; value type is #.", (ftnlen)34); errint_("#", &coltyp, (ftnlen)1); errint_("#", dtype, (ftnlen)1); sigerr_("SPICE(BUG)", (ftnlen)10); chkout_("ZZEKSCMP", (ftnlen)8); return ret_val; } if (l_lt(eltc, cval, cmplen, cvlen)) { rel = 5; } else if (l_gt(eltc, cval, cmplen, cvlen)) { rel = 3; } else { rel = 1; } } else if (coltyp == 4) { if (*dtype != 4 && *dtype != 2) { chkin_("ZZEKSCMP", (ftnlen)8); setmsg_("Column type is #; value type is #.", (ftnlen)34); errint_("#", &coltyp, (ftnlen)1); errint_("#", dtype, (ftnlen)1); sigerr_("SPICE(BUG)", (ftnlen)10); chkout_("ZZEKSCMP", (ftnlen)8); return ret_val; } if (eltd < *dval) { rel = 5; } else if (eltd > *dval) { rel = 3; } else { rel = 1; } } else if (coltyp == 2) { if (*dtype == 3) { numval = (doublereal) (*ival); } else if (*dtype == 2 || *dtype == 4) { numval = *dval; } else { chkin_("ZZEKSCMP", (ftnlen)8); setmsg_("Column type is #; value type is #.", (ftnlen)34); errint_("#", &coltyp, (ftnlen)1); errint_("#", dtype, (ftnlen)1); sigerr_("SPICE(BUG)", (ftnlen)10); chkout_("ZZEKSCMP", (ftnlen)8); return ret_val; } if (eltd < numval) { rel = 5; } else if (eltd > numval) { rel = 3; } else { rel = 1; } } else if (coltyp == 3) { if (*dtype == 3) { numval = (doublereal) (*ival); } else if (*dtype == 2) { numval = *dval; } else { chkin_("ZZEKSCMP", (ftnlen)8); setmsg_("Column type is #; value type is #.", (ftnlen)34); errint_("#", &coltyp, (ftnlen)1); errint_("#", dtype, (ftnlen)1); sigerr_("SPICE(BUG)", (ftnlen)10); chkout_("ZZEKSCMP", (ftnlen)8); return ret_val; } if ((doublereal) elti < numval) { rel = 5; } else if ((doublereal) elti > numval) { rel = 3; } else { rel = 1; } } else { /* Something untoward has happened in our column descriptor */ /* argument. */ chkin_("ZZEKSCMP", (ftnlen)8); setmsg_("The data type code # was not recognized.", (ftnlen)40); errint_("#", &coltyp, (ftnlen)1); sigerr_("SPICE(INVALIDDATATYPE)", (ftnlen)22); chkout_("ZZEKSCMP", (ftnlen)8); return ret_val; } } /* Determine the truth of the input relational expression. */ if (*op == 1) { ret_val = rel == 1; } else if (*op == 5) { ret_val = rel == 5; } else if (*op == 4) { ret_val = rel != 3; } else if (*op == 3) { ret_val = rel == 3; } else if (*op == 2) { ret_val = rel != 5; } else if (*op == 6) { ret_val = rel != 1; } else if (*op == 7 && *dtype == 1) { if (*null || enull) { ret_val = FALSE_; } else { ret_val = matchi_(eltc, cval, "*", "%", cmplen, cvlen, (ftnlen)1, (ftnlen)1); } } else if (*op == 8 && *dtype == 1) { if (*null || enull) { ret_val = FALSE_; } else { ret_val = ! matchi_(eltc, cval, "*", "%", cmplen, cvlen, (ftnlen) 1, (ftnlen)1); } } else { /* Sorry, we couldn't resist. */ chkin_("ZZEKSCMP", (ftnlen)8); setmsg_("The relational operator # was not recognized or was not app" "licable for data type #.", (ftnlen)83); errint_("#", op, (ftnlen)1); errint_("#", dtype, (ftnlen)1); sigerr_("SPICE(UNNATURALRELATION)", (ftnlen)24); chkout_("ZZEKSCMP", (ftnlen)8); return ret_val; } return ret_val; } /* zzekscmp_ */
/* $Procedure ZZEKVMCH ( EK, vector match ) */ logical zzekvmch_(integer *ncnstr, logical *active, integer *lhans, integer * lsdscs, integer *lcdscs, integer *lrows, integer *lelts, integer *ops, integer *rhans, integer *rsdscs, integer *rcdscs, integer *rrows, integer *relts) { /* System generated locals */ integer i__1, i__2, i__3, i__4, i__5, i__6, i__7, i__8; logical ret_val; /* Builtin functions */ integer s_rnge(char *, integer, char *, integer); /* Local variables */ char cval[1024*2]; integer hans[2], elts[2]; logical null[2]; integer unit, rows[2]; extern integer zzekecmp_(integer *, integer *, integer *, integer *, integer *); integer i__, n; extern /* Subroutine */ int chkin_(char *, ftnlen); integer cvlen[2]; logical found; extern /* Subroutine */ int movei_(integer *, integer *, integer *); extern logical matchi_(char *, char *, char *, char *, ftnlen, ftnlen, ftnlen, ftnlen); integer cldscs[22] /* was [11][2] */, cmplen[2], sgdscs[48] /* was [24][2] */; extern /* Subroutine */ int dashlu_(integer *, integer *), setmsg_(char *, ftnlen), errfnm_(char *, integer *, ftnlen), errint_(char *, integer *, ftnlen), sigerr_(char *, ftnlen), chkout_(char *, ftnlen); integer rel; extern /* Subroutine */ int zzekrsc_(integer *, integer *, integer *, integer *, integer *, integer *, char *, logical *, logical *, ftnlen); /* $ Abstract */ /* Determine whether a vector of constraints involving comparisons of */ /* specified EK column elements is satisfied. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* EK */ /* $ Keywords */ /* EK */ /* PRIVATE */ /* $ Declarations */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Boolean Enumerated Type */ /* ekbool.inc Version 1 21-DEC-1994 (NJB) */ /* Within the EK system, boolean values sometimes must be */ /* represented by integer or character codes. The codes and their */ /* meanings are listed below. */ /* Integer code indicating `true': */ /* Integer code indicating `false': */ /* Character code indicating `true': */ /* Character code indicating `false': */ /* End Include Section: EK Boolean Enumerated Type */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Operator Codes */ /* ekopcd.inc Version 1 30-DEC-1994 (NJB) */ /* Within the EK system, operators used in EK queries are */ /* represented by integer codes. The codes and their meanings are */ /* listed below. */ /* Relational expressions in EK queries have the form */ /* <column name> <operator> <value> */ /* For columns containing numeric values, the operators */ /* EQ, GE, GT, LE, LT, NE */ /* may be used; these operators have the same meanings as their */ /* Fortran counterparts. For columns containing character values, */ /* the list of allowed operators includes those in the above list, */ /* and in addition includes the operators */ /* LIKE, UNLIKE */ /* which are used to compare strings to a template. In the character */ /* case, the meanings of the parameters */ /* GE, GT, LE, LT */ /* match those of the Fortran lexical functions */ /* LGE, LGT, LLE, LLT */ /* The additional unary operators */ /* ISNULL, NOTNUL */ /* are used to test whether a value of any type is null. */ /* End Include Section: EK Operator Codes */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Data Types */ /* ektype.inc Version 1 27-DEC-1994 (NJB) */ /* Within the EK system, data types of EK column contents are */ /* represented by integer codes. The codes and their meanings */ /* are listed below. */ /* Integer codes are also used within the DAS system to indicate */ /* data types; the EK system makes no assumptions about compatibility */ /* between the codes used here and those used in the DAS system. */ /* Character type: */ /* Double precision type: */ /* Integer type: */ /* `Time' type: */ /* Within the EK system, time values are represented as ephemeris */ /* seconds past J2000 (TDB), and double precision numbers are used */ /* to store these values. However, since time values require special */ /* treatment both on input and output, and since the `TIME' column */ /* has a special role in the EK specification and code, time values */ /* are identified as a type distinct from double precision numbers. */ /* End Include Section: EK Data Types */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Column Descriptor Parameters */ /* ekcoldsc.inc Version 6 23-AUG-1995 (NJB) */ /* Note: The column descriptor size parameter CDSCSZ is */ /* declared separately in the include section CDSIZE$INC.FOR. */ /* Offset of column descriptors, relative to start of segment */ /* integer address range. This number, when added to the last */ /* integer address preceding the segment, yields the DAS integer */ /* base address of the first column descriptor. Currently, this */ /* offset is exactly the size of a segment descriptor. The */ /* parameter SDSCSZ, which defines the size of a segment descriptor, */ /* is declared in the include file eksegdsc.inc. */ /* Size of column descriptor */ /* Indices of various pieces of column descriptors: */ /* CLSIDX is the index of the column's class code. (We use the */ /* word `class' to distinguish this item from the column's data */ /* type.) */ /* TYPIDX is the index of the column's data type code (CHR, INT, DP, */ /* or TIME). The type is actually implied by the class, but it */ /* will frequently be convenient to look up the type directly. */ /* LENIDX is the index of the column's string length value, if the */ /* column has character type. A value of IFALSE in this element of */ /* the descriptor indicates that the strings have variable length. */ /* SIZIDX is the index of the column's element size value. This */ /* descriptor element is meaningful for columns with fixed-size */ /* entries. For variable-sized columns, this value is IFALSE. */ /* NAMIDX is the index of the base address of the column's name. */ /* IXTIDX is the data type of the column's index. IXTIDX */ /* contains a type value only if the column is indexed. For columns */ /* that are not indexed, the location IXTIDX contains the boolean */ /* value IFALSE. */ /* IXPIDX is a pointer to the column's index. IXTPDX contains a */ /* meaningful value only if the column is indexed. The */ /* interpretation of the pointer depends on the data type of the */ /* index. */ /* NFLIDX is the index of a flag indicating whether nulls are */ /* permitted in the column. The value at location NFLIDX is */ /* ITRUE if nulls are permitted and IFALSE otherwise. */ /* ORDIDX is the index of the column's ordinal position in the */ /* list of columns belonging to the column's parent segment. */ /* METIDX is the index of the column's integer metadata pointer. */ /* This pointer is a DAS integer address. */ /* The last position in the column descriptor is reserved. No */ /* parameter is defined to point to this location. */ /* End Include Section: EK Column Descriptor Parameters */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Segment Descriptor Parameters */ /* eksegdsc.inc Version 8 06-NOV-1995 (NJB) */ /* All `base addresses' referred to below are the addresses */ /* *preceding* the item the base applies to. This convention */ /* enables simplied address calculations in many cases. */ /* Size of segment descriptor. Note: the include file ekcoldsc.inc */ /* must be updated if this parameter is changed. The parameter */ /* CDOFF in that file should be kept equal to SDSCSZ. */ /* Index of the segment type code: */ /* Index of the segment's number. This number is the segment's */ /* index in the list of segments contained in the EK to which */ /* the segment belongs. */ /* Index of the DAS integer base address of the segment's integer */ /* meta-data: */ /* Index of the DAS character base address of the table name: */ /* Index of the segment's column count: */ /* Index of the segment's record count: */ /* Index of the root page number of the record tree: */ /* Index of the root page number of the character data page tree: */ /* Index of the root page number of the double precision data page */ /* tree: */ /* Index of the root page number of the integer data page tree: */ /* Index of the `modified' flag: */ /* Index of the `initialized' flag: */ /* Index of the shadowing flag: */ /* Index of the companion file handle: */ /* Index of the companion segment number: */ /* The next three items are, respectively, the page numbers of the */ /* last character, d.p., and integer data pages allocated by the */ /* segment: */ /* The next three items are, respectively, the page-relative */ /* indices of the last DAS word in use in the segment's */ /* last character, d.p., and integer data pages: */ /* Index of the DAS character base address of the column name list: */ /* The last descriptor element is reserved for future use. No */ /* parameter is defined to point to this location. */ /* End Include Section: EK Segment Descriptor Parameters */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Template Matching Wild Characters */ /* ekwild.inc Version 1 16-JAN-1995 (NJB) */ /* Within the EK system, templates used for pattern matching */ /* are those accepted by the SPICELIB routine MATCHW. MATCHW */ /* accepts two special characters: one representing wild */ /* strings and one representing wild characters. This include */ /* file defines those special characters for use within the EK */ /* system. */ /* Wild string symbol: this character matches any string. */ /* Wild character symbol: this character matches any character. */ /* End Include Section: EK Template Matching Wild Characters */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* Include Section: EK Query Limit Parameters */ /* ekqlimit.inc Version 3 16-NOV-1995 (NJB) */ /* Parameter MAXCON increased to 1000. */ /* ekqlimit.inc Version 2 01-AUG-1995 (NJB) */ /* Updated to support SELECT clause. */ /* ekqlimit.inc Version 1 07-FEB-1995 (NJB) */ /* These limits apply to character string queries input to the */ /* EK scanner. This limits are part of the EK system's user */ /* interface: the values should be advertised in the EK required */ /* reading document. */ /* Maximum length of an input query: MAXQRY. This value is */ /* currently set to twenty-five 80-character lines. */ /* Maximum number of columns that may be listed in the */ /* `order-by clause' of a query: MAXSEL. MAXSEL = 50. */ /* Maximum number of tables that may be listed in the `FROM */ /* clause' of a query: MAXTAB. */ /* Maximum number of relational expressions that may be listed */ /* in the `constraint clause' of a query: MAXCON. */ /* This limit applies to a query when it is represented in */ /* `normalized form': that is, the constraints have been */ /* expressed as a disjunction of conjunctions of relational */ /* expressions. The number of relational expressions in a query */ /* that has been expanded in this fashion may be greater than */ /* the number of relations in the query as orginally written. */ /* For example, the expression */ /* ( ( A LT 1 ) OR ( B GT 2 ) ) */ /* AND */ /* ( ( C NE 3 ) OR ( D EQ 4 ) ) */ /* which contains 4 relational expressions, expands to the */ /* equivalent normalized constraint */ /* ( ( A LT 1 ) AND ( C NE 3 ) ) */ /* OR */ /* ( ( A LT 1 ) AND ( D EQ 4 ) ) */ /* OR */ /* ( ( B GT 2 ) AND ( C NE 3 ) ) */ /* OR */ /* ( ( B GT 2 ) AND ( D EQ 4 ) ) */ /* which contains eight relational expressions. */ /* MXJOIN is the maximum number of tables that can be joined. */ /* MXJCON is the maximum number of join constraints allowed. */ /* Maximum number of order-by columns that may be used in the */ /* `order-by clause' of a query: MAXORD. MAXORD = 10. */ /* Maximum number of tokens in a query: 500. Tokens are reserved */ /* words, column names, parentheses, and values. Literal strings */ /* and time values count as single tokens. */ /* Maximum number of numeric tokens in a query: */ /* Maximum total length of character tokens in a query: */ /* Maximum length of literal string values allowed in queries: */ /* MAXSTR. */ /* End Include Section: EK Query Limit Parameters */ /* $ Brief_I/O */ /* Variable I/O Description */ /* -------- --- -------------------------------------------------- */ /* NCNSTR I Number of join constraints. */ /* ACTIVE I Array of flags indicating applicable constraints. */ /* LHANS I Handles of EKs for columns on LHS's of constraints. */ /* LSDSCS I Descriptors of segments on LHS's of constraints. */ /* LCDSCS I Column descriptors for LHS's of constraints. */ /* LROWS I Row numbers for LHS's of constraints. */ /* LCOLS I Column names for LHS's of constraints. */ /* LELTS I Column element indices for LHS's of constraints. */ /* OPS I Code for relational operator in constraints. */ /* RHAN I Handles of EKs for columns on RHS's of constraints. */ /* RSDSCS I Descriptors of segments on RHS's of constraints. */ /* RCDSCS I Column descriptors for RHS's of constraints. */ /* RROWS I Row numbers for RHS's of constraints. */ /* RCOLS I Column names for RHS's of constraints. */ /* RELTS I Column element indices for RHS's of constraints. */ /* The function returns .TRUE. if and only if all of the relational */ /* constraints specified by the input arguments are satisfied. */ /* $ Detailed_Input */ /* NCNSTR is the number of input join constraints. Each */ /* input constraint relates two EK column entries; */ /* abstractly, the form of the constraints is: */ /* <col entry 1> <relational op> <col entry 2> */ /* The compared entries are defined by handles, */ /* segment base addresses, column descriptors, and row */ /* numbers. */ /* ACTIVE is an array of logical flags indicating which */ /* constraints are currently applicable. The Nth */ /* element of ACTIVE indicates whether or not to apply */ /* the Nth constraint: if ACTIVE(N) is .TRUE., the */ /* constraint is applicable, otherwise it isn't. */ /* The elements of the other input arguments that */ /* define constraints are defined when the */ /* corresponding element of ACTIVE is .TRUE. For */ /* example, when the second constraint is not active, */ /* the second column descriptor in LDSCRS may not be */ /* defined. */ /* LHANS is an array of EK file handles for the left-hand- */ /* sides of the constraints. */ /* LSDSCS is an array of segment descriptors for the */ /* left-hand-sides of the constraints. */ /* LDSCRS is an array of column descriptors for the */ /* left-hand-sides of the constraints. */ /* LROWS is an array of row numbers for the left-hand-sides */ /* of the constraints. */ /* LELTS is an array of column entry element indices for the */ /* left-hand-sides of the constraints. These */ /* indices are ignored unless the columns they apply */ /* to are array-valued. */ /* OPS is an array of relational operators used in the */ /* input constraints. The elements of OPS are any of */ /* the integer parameters */ /* EQ, GE, GT, LE, LT, NE, LIKE, ISNULL, NOTNUL */ /* The Ith element of OPS corresponds to the Ith */ /* constraint. */ /* RHANS is an array of EK file handles for the right-hand- */ /* sides of the constraints. */ /* RSDSCS is an array of segment descriptors for the */ /* right-hand-sides of the constraints. */ /* RDSCRS is an array of column descriptors for the */ /* right-hand-sides of the constraints. */ /* RROWS is an array of row numbers for the right-hand-sides */ /* of the constraints. */ /* RELTS is an array of column entry element indices for the */ /* right-hand-sides of the constraints. These */ /* indices are ignored unless the columns they apply */ /* to are array-valued. */ /* $ Detailed_Output */ /* The function returns .TRUE. if and only if all of the relational */ /* constraints specified by the input arguments are satisfied. */ /* $ Parameters */ /* Within the EK system, operators used in EK queries are */ /* represented by integer codes. The codes and their meanings are */ /* listed below. */ /* Relational expressions in EK queries have the form */ /* <column name> <operator> <value> */ /* For columns containing numeric values, the operators */ /* EQ, GE, GT, LE, LT, NE */ /* may be used; these operators have the same meanings as their */ /* Fortran counterparts. For columns containing character values, */ /* the list of allowed operators includes those in the above list, */ /* and in addition includes the operator */ /* LIKE */ /* which is used to compare strings to a template. In the character */ /* case, the meanings of the parameters */ /* GE, GT, LE, LT */ /* match those of the Fortran lexical functions */ /* LGE, LGT, LLE, LLT */ /* The additional unary operators */ /* ISNULL, NOTNUL */ /* are used to test whether a value of any type is null. */ /* $ Exceptions */ /* 1) If any of the input file handles is invalid, the error */ /* will be diagnosed by routines called by this routine. */ /* The function value is .FALSE. in this case. */ /* 2) If an I/O error occurs while attempting to find the address */ /* range of a column entry element, the error will */ /* be diagnosed by routines called by this routine. The */ /* function value is .FALSE. in this case. */ /* 3) If any of the input segment descriptors, column descriptors, */ /* or row numbers are invalid, this routine may fail in */ /* unpredictable, but possibly spectacular, ways. Except */ /* as described in this header section, no attempt is made to */ /* handle these errors. */ /* 4) If the data type code in an input column descriptor is not */ /* recognized, the error SPICE(INVALIDDATATYPE) is signalled. */ /* The function value is .FALSE. in this case. */ /* 5) If a relational operator code is not recognized, the */ /* error SPICE(UNNATURALRELATION) is signalled. */ /* The function value is .FALSE. in this case. */ /* $ Files */ /* See the descriptions of the arguments LHAN and RHAN in */ /* $Detailed_Input. */ /* $ Particulars */ /* This routine is an EK utility intended to centralize a frequently */ /* performed comparison operation. */ /* $ Examples */ /* See EKSRCH. */ /* $ Restrictions */ /* 1) This routine must execute quickly. Therefore, it checks in */ /* only if it detects an error. If an error is signalled by a */ /* routine called by this routine, this routine will not appear */ /* in the SPICELIB traceback display. Also, in the interest */ /* of speed, this routine does not test the value of the SPICELIB */ /* function RETURN upon entry. */ /* 2) This routine depends on the requested comparison to have */ /* been semantically checked. Semantically invalid comparisons */ /* are treated as bugs. */ /* 3) Only the first MAXSTR characters of character strings are */ /* used in comparisons. */ /* C */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* $ Version */ /* - SPICELIB Version 1.1.0, 01-JUN-2010 (NJB) */ /* Bug fix: subscript out of range error caused by */ /* column entry strings longer than MAXLEN has been */ /* corrected. Also updated Restrictions header section. */ /* - Beta Version 1.0.0, 11-OCT-1995 (NJB) */ /* -& */ /* SPICELIB functions */ /* Non-SPICELIB functions */ /* Local variables */ /* Use discovery check-in for speed. Don't check RETURN. */ /* The function value defaults to .TRUE. As we test the constraints, */ /* we may find one that the input row vector doesn't satisfy, at */ /* which point we can terminate the comparison. */ ret_val = TRUE_; n = 1; while(n <= *ncnstr && ret_val) { if (active[n - 1]) { /* Apply the Nth join constraint to the input row vector. */ /* Compare the entries in the two rows in the columns indicated */ /* by the Nth column descriptor pair. To do this, find the */ /* address ranges for each column entry. We don't check the */ /* found flag because every column entry has at least one */ /* element. */ /* We'll start out setting REL to EQ. If we find out */ /* otherwise, we'll change it. */ hans[0] = lhans[n - 1]; hans[1] = rhans[n - 1]; movei_(&lsdscs[n * 24 - 24], &c__24, sgdscs); movei_(&rsdscs[n * 24 - 24], &c__24, &sgdscs[24]); rows[0] = lrows[n - 1]; rows[1] = rrows[n - 1]; elts[0] = lelts[n - 1]; elts[1] = relts[n - 1]; movei_(&lcdscs[n * 11 - 11], &c__11, cldscs); movei_(&rcdscs[n * 11 - 11], &c__11, &cldscs[11]); rel = zzekecmp_(hans, sgdscs, cldscs, rows, elts); /* Determine the truth of the Nth input relational expression, */ /* and set ZZEKVMCH accordingly. */ if (ops[n - 1] == 1) { ret_val = rel == 1; } else if (ops[n - 1] == 5) { ret_val = rel == 5; } else if (ops[n - 1] == 4) { ret_val = rel != 3; } else if (ops[n - 1] == 3) { ret_val = rel == 3; } else if (ops[n - 1] == 2) { ret_val = rel != 5; } else if (ops[n - 1] == 6) { ret_val = rel != 1; } else if (ops[n - 1] == 7 && cldscs[1] == 1) { for (i__ = 1; i__ <= 2; ++i__) { zzekrsc_(&hans[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("hans", i__1, "zzekvmch_", (ftnlen)399)], & sgdscs[(i__2 = i__ * 24 - 24) < 48 && 0 <= i__2 ? i__2 : s_rnge("sgdscs", i__2, "zzekvmch_", ( ftnlen)399)], &cldscs[(i__3 = i__ * 11 - 11) < 22 && 0 <= i__3 ? i__3 : s_rnge("cldscs", i__3, "zzekvmch_", (ftnlen)399)], &rows[(i__4 = i__ - 1) < 2 && 0 <= i__4 ? i__4 : s_rnge("rows", i__4, "zzekvmch_", (ftnlen)399)], &elts[(i__5 = i__ - 1) < 2 && 0 <= i__5 ? i__5 : s_rnge("elts", i__5, "zzekvmch_", (ftnlen)399)], &cvlen[(i__6 = i__ - 1) < 2 && 0 <= i__6 ? i__6 : s_rnge("cvlen", i__6, "zzekvmch_", (ftnlen)399)], cval + (((i__7 = i__ - 1) < 2 && 0 <= i__7 ? i__7 : s_rnge("cval", i__7, "zzekvmch_", (ftnlen)399)) << 10), &null[( i__8 = i__ - 1) < 2 && 0 <= i__8 ? i__8 : s_rnge( "null", i__8, "zzekvmch_", (ftnlen)399)], &found, (ftnlen)1024); if (! found) { dashlu_(&hans[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("hans", i__1, "zzekvmch_", ( ftnlen)412)], &unit); chkin_("ZZEKVMCH", (ftnlen)8); setmsg_("EK = #; COLIDX = #; ROW = #; ELTIDX = #. " "Column entry element was not found.", ( ftnlen)79); errfnm_("#", &unit, (ftnlen)1); errint_("#", &cldscs[(i__1 = i__ * 11 - 3) < 22 && 0 <= i__1 ? i__1 : s_rnge("cldscs", i__1, "zze" "kvmch_", (ftnlen)419)], (ftnlen)1); errint_("#", &rows[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("rows", i__1, "zzekvmch_", ( ftnlen)420)], (ftnlen)1); errint_("#", &elts[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("elts", i__1, "zzekvmch_", ( ftnlen)421)], (ftnlen)1); sigerr_("SPICE(INVALIDINDEX)", (ftnlen)19); chkout_("ZZEKVMCH", (ftnlen)8); return ret_val; } if (found && ! null[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("null", i__1, "zzekvmch_", (ftnlen) 428)]) { /* Computing MIN */ i__3 = cvlen[(i__2 = i__ - 1) < 2 && 0 <= i__2 ? i__2 : s_rnge("cvlen", i__2, "zzekvmch_", (ftnlen) 430)]; cmplen[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("cmplen", i__1, "zzekvmch_", (ftnlen) 430)] = min(i__3,1024); } else { cmplen[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("cmplen", i__1, "zzekvmch_", (ftnlen) 432)] = 0; } } ret_val = matchi_(cval, cval + 1024, "*", "%", cmplen[0], cmplen[1], (ftnlen)1, (ftnlen)1); } else if (ops[n - 1] == 8 && cldscs[1] == 1) { for (i__ = 1; i__ <= 2; ++i__) { zzekrsc_(&hans[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("hans", i__1, "zzekvmch_", (ftnlen)450)], & sgdscs[(i__2 = i__ * 24 - 24) < 48 && 0 <= i__2 ? i__2 : s_rnge("sgdscs", i__2, "zzekvmch_", ( ftnlen)450)], &cldscs[(i__3 = i__ * 11 - 11) < 22 && 0 <= i__3 ? i__3 : s_rnge("cldscs", i__3, "zzekvmch_", (ftnlen)450)], &rows[(i__4 = i__ - 1) < 2 && 0 <= i__4 ? i__4 : s_rnge("rows", i__4, "zzekvmch_", (ftnlen)450)], &elts[(i__5 = i__ - 1) < 2 && 0 <= i__5 ? i__5 : s_rnge("elts", i__5, "zzekvmch_", (ftnlen)450)], &cvlen[(i__6 = i__ - 1) < 2 && 0 <= i__6 ? i__6 : s_rnge("cvlen", i__6, "zzekvmch_", (ftnlen)450)], cval + (((i__7 = i__ - 1) < 2 && 0 <= i__7 ? i__7 : s_rnge("cval", i__7, "zzekvmch_", (ftnlen)450)) << 10), &null[( i__8 = i__ - 1) < 2 && 0 <= i__8 ? i__8 : s_rnge( "null", i__8, "zzekvmch_", (ftnlen)450)], &found, (ftnlen)1024); if (! found) { dashlu_(&hans[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("hans", i__1, "zzekvmch_", ( ftnlen)463)], &unit); chkin_("ZZEKVMCH", (ftnlen)8); setmsg_("EK = #; COLIDX = #; ROW = #; ELTIDX = #. " "Column entry element was not found.", ( ftnlen)79); errfnm_("#", &unit, (ftnlen)1); errint_("#", &cldscs[(i__1 = i__ * 11 - 3) < 22 && 0 <= i__1 ? i__1 : s_rnge("cldscs", i__1, "zze" "kvmch_", (ftnlen)470)], (ftnlen)1); errint_("#", &rows[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("rows", i__1, "zzekvmch_", ( ftnlen)471)], (ftnlen)1); errint_("#", &elts[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("elts", i__1, "zzekvmch_", ( ftnlen)472)], (ftnlen)1); sigerr_("SPICE(INVALIDINDEX)", (ftnlen)19); chkout_("ZZEKVMCH", (ftnlen)8); return ret_val; } if (found && ! null[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("null", i__1, "zzekvmch_", (ftnlen) 480)]) { /* Computing MIN */ i__3 = cvlen[(i__2 = i__ - 1) < 2 && 0 <= i__2 ? i__2 : s_rnge("cvlen", i__2, "zzekvmch_", (ftnlen) 482)]; cmplen[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("cmplen", i__1, "zzekvmch_", (ftnlen) 482)] = min(i__3,1024); } else { cmplen[(i__1 = i__ - 1) < 2 && 0 <= i__1 ? i__1 : s_rnge("cmplen", i__1, "zzekvmch_", (ftnlen) 484)] = 0; } } ret_val = ! matchi_(cval, cval + 1024, "*", "%", cmplen[0], cmplen[1], (ftnlen)1, (ftnlen)1); } else { /* Sorry, we couldn't resist. */ ret_val = FALSE_; chkin_("ZZEKVMCH", (ftnlen)8); setmsg_("The relational operator # was not recognized.", ( ftnlen)45); errint_("#", &ops[n - 1], (ftnlen)1); sigerr_("SPICE(UNNATURALRELATION)", (ftnlen)24); chkout_("ZZEKVMCH", (ftnlen)8); return ret_val; } } /* We've completed the test for the Nth constraint, if that */ /* constraint was active. */ ++n; } return ret_val; } /* zzekvmch_ */