text: /* ekdelr.f -- translated by f2c (version 19980913).
     You must link the resulting object file with the libraries:
  	-lf2c -lm   (in that order)
  */
  
  #include "f2c.h"
  
  /* Table of constant values */
  
  static integer c__3 = 3;
  
  /* $Procedure EKDELR ( EK, delete record from segment ) */
  /* Subroutine */ int ekdelr_(integer *handle, integer *segno, integer *recno)
  {
      /* System generated locals */
      integer i__1, i__2, i__3;
  
      /* Local variables */
      integer base, nrec;
      extern integer zzekrp2n_(integer *, integer *, integer *);
      integer unit;
      extern /* Subroutine */ int zzekcnam_(integer *, integer *, char *, 
  	    ftnlen), zzekpgch_(integer *, char *, ftnlen), zzekrbck_(char *, 
  	    integer *, integer *, integer *, integer *, ftnlen), zzekmloc_(
  	    integer *, integer *, integer *, integer *), zzekglnk_(integer *, 
  	    integer *, integer *, integer *), zzekpgpg_(integer *, integer *, 
  	    integer *, integer *), zzektrdl_(integer *, integer *, integer *),
  	     zzekslnk_(integer *, integer *, integer *, integer *), zzektrdp_(
  	    integer *, integer *, integer *, integer *);
      integer i__, p, mbase;
      extern /* Subroutine */ int chkin_(char *, ftnlen), errch_(char *, char *,
  	     ftnlen, ftnlen);
      integer class__, ncols;
      extern logical failed_(void);
      integer mp, dscbas, coldsc[11], segdsc[24];
      extern /* Subroutine */ int dasrdi_(integer *, integer *, integer *, 
  	    integer *), dasudi_(integer *, integer *, integer *, integer *), 
  	    dashlu_(integer *, integer *);
      char column[32];
      extern logical return_(void);
      integer nlinks, recptr;
      extern /* Subroutine */ int chkout_(char *, ftnlen), setmsg_(char *, 
  	    ftnlen), errint_(char *, integer *, ftnlen), sigerr_(char *, 
  	    ftnlen), errfnm_(char *, integer *, ftnlen), zzekde01_(integer *, 
  	    integer *, integer *, integer *), zzekde02_(integer *, integer *, 
  	    integer *, integer *), zzekde03_(integer *, integer *, integer *, 
  	    integer *), zzekde04_(integer *, integer *, integer *, integer *),
  	     zzekde05_(integer *, integer *, integer *, integer *), zzekde06_(
  	    integer *, integer *, integer *, integer *), zzekdps_(integer *, 
  	    integer *, integer *, integer *);
  
  /* $ Abstract */
  
  /*     Delete a specified record from a specified E-kernel segment. */
  
  /* $ 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 */
  /*     UTILITY */
  
  /* $ 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 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 Column Name Size */
  
  /*        ekcnamsz.inc Version 1    17-JAN-1995 (NJB) */
  
  
  /*     Size of column name, in characters. */
  
  
  /*     End Include Section:  EK Column Name Size */
  
  /* $ 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. */
  /*     SEGNO      I   Segment number. */
  /*     RECNO      I   Record number. */
  
  /* $ Detailed_Input */
  
  /*     HANDLE   is a file handle of an EK open for write access. */
  
  /*     SEGNO    is the number of the segment from which to */
  /*              delete the specified record. */
  
  /*     RECNO    is the index of the record to delete. RECNO must */
  /*              be in the range 1 : NREC, where NREC is the */
  /*              number of records in the segment prior to the */
  /*              insertion. */
  
  /* $ Detailed_Output */
  
  /*     None. See the $Particulars section for a description of the */
  /*     effect of this routine. */
  
  /* $ Parameters */
  
  /*     None. */
  
  /* $ Exceptions */
  
  /*     1)  If HANDLE is invalid, an error is signaled by a routine in the */
  /*         call tree of this routine. The file will not be modified. */
  
  /*     2)  If SEGNO is out of range, the error SPICE(INVALIDINDEX) */
  /*         is signaled. The file will not be modified. */
  
  /*     3)  If RECNO is out of range, the error SPICE(INVALIDINDEX) */
  /*         is signaled. The file will not be modified. */
  
  /*     4)  If an I/O error occurs while reading or writing the indicated */
  /*         file, the error is signaled by a routine in the call tree of */
  /*         this routine. The file may be corrupted. */
  
  /* $ Files */
  
  /*     See the EK Required Reading ek.req for a discussion of the EK file */
  /*     format. */
  
  /* $ Particulars */
  
  /*     This routine operates by side effects: it deletes a record */
  /*     from an EK segment. Deleting a record implies: */
  
  /*        1) All column entries in the record are deleted. */
  
  /*        2) Link counts are decremented for data pages containing */
  /*           column entries in the record to be deleted. Pages whose */
  /*           link counts drop to zero are freed. */
  
  /*        3) All column indexes are updated for the parent segment. */
  
  /*        4) The link count is decremented for the page containing the */
  /*           record pointer structure of the record to be deleted. If */
  /*           the link count drops to zero, the page is freed. */
  
  /*        5) The pointer to the deleted record is deleted from the */
  /*           record tree for the parent segment. */
  
  /*        6) The segment's metadata is updated to reflect the new */
  /*           record count. */
  
  /* $ Examples */
  
  /*     1)  Suppose the second segment of an EK file designated by */
  /*         HANDLE contains 5 records: */
  
  /*            +-----------------+ */
  /*            |     Record 1    | */
  /*            +-----------------+ */
  /*            |     Record 2    | */
  /*            +-----------------+ */
  /*            |     Record 3    | */
  /*            +-----------------+ */
  /*            |     Record 4    | */
  /*            +-----------------+ */
  /*            |     Record 5    | */
  /*            +-----------------+ */
  
  /*         Then the call */
  
  /*            CALL EKDELR ( HANDLE, 2, 3 ) */
  
  /*         deletes the third record from the segment, leaving the */
  /*         segment's contents as follows: */
  
  /*            +-----------------+ */
  /*            |     Record 1    | */
  /*            +-----------------+ */
  /*            |     Record 2    | */
  /*            +-----------------+ */
  /*            |     Record 4    | */
  /*            +-----------------+ */
  /*            |     Record 5    | */
  /*            +-----------------+ */
  
  /* $ Restrictions */
  
  /*     None. */
  
  /* $ Literature_References */
  
  /*     None. */
  
  /* $ Author_and_Institution */
  
  /*     N.J. Bachman       (JPL) */
  /*     J. Diaz del Rio    (ODC Space) */
  
  /* $ Version */
  
  /* -    SPICELIB Version 1.1.0, 26-MAY-2021 (JDR) */
  
  /*        Added IMPLICIT NONE statement. */
  
  /*        Edited the header to comply with NAIF standard. */
  
  /* -    SPICELIB Version 1.0.0, 19-DEC-1995 (NJB) */
  
  /* -& */
  /* $ Index_Entries */
  
  /*     delete record from an EK segment */
  
  /* -& */
  
  /*     SPICELIB functions */
  
  
  /*     Non-SPICELIB functions */
  
  
  /*     Local variables */
  
  
  /*     Standard SPICE error handling. */
  
      if (return_()) {
  	return 0;
      } else {
  	chkin_("EKDELR", (ftnlen)6);
      }
  
  /*     Before trying to actually modify the file, do every error */
  /*     check we can. */
  
  /*     Is this file handle valid--is the file open for paged write */
  /*     access?  Signal an error if not. */
  
      zzekpgch_(handle, "WRITE", (ftnlen)5);
      if (failed_()) {
  	chkout_("EKDELR", (ftnlen)6);
  	return 0;
      }
  
  /*     Look up the integer metadata page and page base for the segment. */
  /*     Given the base address, we can read the pertinent metadata in */
  /*     one shot. */
  
      zzekmloc_(handle, segno, &mp, &mbase);
      if (failed_()) {
  	chkout_("EKDELR", (ftnlen)6);
  	return 0;
      }
      i__1 = mbase + 1;
      i__2 = mbase + 24;
      dasrdi_(handle, &i__1, &i__2, segdsc);
  
  /*     In case the target EK is shadowed, let the shadow system know */
  /*     about the deletion.  This must be done before the data is */
  /*     deleted.  The argument COLDSC is unused on this call. */
  
      zzekrbck_("DELETE", handle, segdsc, coldsc, recno, (ftnlen)6);
  
  /*     We'll need to know how many columns the segment has in order to */
  /*     compute the size of the record pointer.  The record pointer */
  /*     contains DPTBAS items plus two elements for each column. */
  
      ncols = segdsc[4];
  
  /*     Check the number of records already present.  RECNO must not */
  /*     exceed this count. */
  
      nrec = segdsc[5];
      if (*recno < 1 || *recno > nrec) {
  	setmsg_("Record number = #; valid range is 1:#.", (ftnlen)38);
  	errint_("#", recno, (ftnlen)1);
  	errint_("#", &nrec, (ftnlen)1);
  	sigerr_("SPICE(INVALIDINDEX)", (ftnlen)19);
  	chkout_("EKDELR", (ftnlen)6);
  	return 0;
      }
  
  /*     Delete all of the column entries in the record.  The deletion */
  /*     routines handle updating column indexes and freeing unlinked */
  /*     pages. */
  
      zzektrdp_(handle, &segdsc[6], recno, &recptr);
      i__1 = ncols;
      for (i__ = 1; i__ <= i__1; ++i__) {
  
  /*        Get the descriptor of the Ith column. */
  
  	dscbas = mbase + 24 + (i__ - 1) * 11;
  	i__2 = dscbas + 1;
  	i__3 = dscbas + 11;
  	dasrdi_(handle, &i__2, &i__3, coldsc);
  	class__ = coldsc[0];
  
  /*        Delete the entry in the current column. */
  
  	if (class__ == 1) {
  	    zzekde01_(handle, segdsc, coldsc, &recptr);
  	} else if (class__ == 2) {
  	    zzekde02_(handle, segdsc, coldsc, &recptr);
  	} else if (class__ == 3) {
  	    zzekde03_(handle, segdsc, coldsc, &recptr);
  	} else if (class__ == 4) {
  	    zzekde04_(handle, segdsc, coldsc, &recptr);
  	} else if (class__ == 5) {
  	    zzekde05_(handle, segdsc, coldsc, &recptr);
  	} else if (class__ == 6) {
  	    zzekde06_(handle, segdsc, coldsc, &recptr);
  	} else {
  
  /*           This is an unsupported class. */
  
  	    *recno = zzekrp2n_(handle, &segdsc[1], &recptr);
  	    dashlu_(handle, &unit);
  	    zzekcnam_(handle, coldsc, column, (ftnlen)32);
  	    setmsg_("Class # from input column descriptor is not supported. "
  		    " COLUMN = #; RECNO = #; SEGNO = #; EK = #.", (ftnlen)97);
  	    errint_("#", &class__, (ftnlen)1);
  	    errch_("#", column, (ftnlen)1, (ftnlen)32);
  	    errint_("#", recno, (ftnlen)1);
  	    errint_("#", &segdsc[1], (ftnlen)1);
  	    errfnm_("#", &unit, (ftnlen)1);
  	    sigerr_("SPICE(NOCLASS)", (ftnlen)14);
  	    chkout_("EKDELR", (ftnlen)6);
  	    return 0;
  	}
      }
  
  /*     Find the page containing the record pointer. */
  
      i__1 = recptr + 1;
      zzekpgpg_(&c__3, &i__1, &p, &base);
  
  /*     Get the link count for the page.  If we have more */
  /*     than one link to the page, decrement the link count.  If */
  /*     we're down to one link, this deletion will finish off the */
  /*     page:  we'll deallocate it. */
  
      zzekglnk_(handle, &c__3, &p, &nlinks);
      if (nlinks > 1) {
  	i__1 = nlinks - 1;
  	zzekslnk_(handle, &c__3, &p, &i__1);
      } else {
  
  /*        If we removed the last item from the page, we can delete */
  /*        the page.  ZZEKDPS adjusts the segment's metadata */
  /*        to reflect the deallocation. */
  
  	zzekdps_(handle, segdsc, &c__3, &p);
      }
  
  /*     The entry corresponding to the record is deleted from */
  /*     the data record tree at index RECNO.  The record count gets */
  /*     decremented. */
  
      zzektrdl_(handle, &segdsc[6], recno);
      --segdsc[5];
  
  /*     Write out the updated segment descriptor. */
  
      i__1 = mbase + 1;
      i__2 = mbase + 24;
      dasudi_(handle, &i__1, &i__2, segdsc);
      chkout_("EKDELR", (ftnlen)6);
      return 0;
  } /* ekdelr_ */
  
  