home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / DOOG / CBASE09.ZIP / CBASE.ZIP / CBGETKCU.C < prev    next >
Text File  |  1989-08-31  |  2KB  |  95 lines

  1. /*    Copyright (c) 1989 Citadel    */
  2. /*       All Rights Reserved        */
  3.  
  4. /* #ident    "cbgetkcu.c    1.1 - 89/08/31" */
  5.  
  6. #include <blkio.h>
  7. #include <btree.h>
  8. #include <errno.h>
  9. /* #include <string.h> */
  10. #include "cbase_.h"
  11.  
  12. /*man---------------------------------------------------------------------------
  13. NAME
  14.      cbgetkcur - get cbase key cursor
  15.  
  16. SYNOPSIS
  17.      #include <cbase.h>
  18.  
  19.      int cbgetkcur(cbp, field, cbkpos_p)
  20.      cbase_t *cbp;
  21.      int field;
  22.      cbkpos_t *cbkpos_p;
  23.  
  24. DESCRIPTION
  25.      The cbgetkcur function gets the position of a key cursor for cbase
  26.      cbp into the location pointed to by cbkpos_p.
  27.  
  28.      field is the field for which to get the key cursor.
  29.  
  30.      cbgetkcur will fail if one or more of the following is true:
  31.  
  32.      [EINVAL]       cbp is not a valid cbase pointer.
  33.      [EINVAL]       field is less than 1 or greater than
  34.                     the number of fields defined for cbp.
  35.      [EINVAL]       cbkpos_p is the NULL pointer.
  36.      [CBELOCK]      cbp is not locked.
  37.      [CBENOPEN]     cbp is not open.
  38.  
  39. SEE ALSO
  40.      cbgetrcur, cbsetkcur.
  41.  
  42. DIAGNOSTICS
  43.      Upon successful completion, a value of 0 is returned.  Otherwise, a
  44.      value of -1 is returned, and errno set to indicate the error.
  45.  
  46. ------------------------------------------------------------------------------*/
  47. int cbgetkcur(cbp, field, cbkpos_p)
  48. cbase_t *  cbp;
  49. int        field;
  50. cbkpos_t * cbkpos_p;
  51. {
  52.     int    rs    = 0;
  53.     btpos_t    btpos;
  54.  
  55.     errno = 0;
  56.  
  57.     /* initialize storage */
  58.     memset((void *)&btpos, 0, sizeof(btpos));
  59.  
  60.     /* validate arguments */
  61.     if ((!cb_valid(cbp)) || (cbkpos_p == NULL)) {
  62.         errno = EINVAL;
  63.         return -1;
  64.     }
  65.     if ((field < 1) || (field > cbp->fldcnt)) {
  66.         errno = EINVAL;
  67.         return -1;
  68.     }
  69.  
  70.     /* check if not open */
  71.     if (!(cbp->flags & CBOPEN)) {
  72.         errno = CBENOPEN;
  73.         return -1;
  74.     }
  75.  
  76.     /* check if not locked */
  77.     if (!(cbp->flags & CBLOCKS)) {
  78.         errno = CBELOCK;
  79.         return -1;
  80.     }
  81.  
  82.     /* get key cursor position */
  83.     rs = btgetcur(cbp->btp[field - 1], &btpos);
  84.     if (rs == -1) {
  85.         CBEPRINT;
  86.         return -1;
  87.     }
  88.  
  89.     /* load return argument */
  90.     memcpy((void *)cbkpos_p, (void *)&btpos, sizeof(cbkpos_t));
  91.  
  92.     errno = 0;
  93.     return 0;
  94. }
  95.