home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / cbase.zip / CBASE10B.ZIP / CBASE.ZIP / CBPUTR.C < prev    next >
Text File  |  1989-11-08  |  2KB  |  93 lines

  1. /*    Copyright (c) 1989 Citadel    */
  2. /*       All Rights Reserved        */
  3.  
  4. /* #ident    "cbputr.c    1.2 - 89/11/08" */
  5.  
  6. #include <errno.h>
  7. #include <lseq.h>
  8. #include "cbase_.h"
  9.  
  10. /*man---------------------------------------------------------------------------
  11. NAME
  12.      cbputr - put cbase record
  13.  
  14. SYNOPSIS
  15.      #include <cbase.h>
  16.  
  17.      int cbputr(cbp, buf)
  18.      cbase_t *cbp;
  19.      const void *buf;
  20.  
  21. DESCRIPTION
  22.      The cbputr function overwrites the current record of cbase cbp.
  23.      The record cursor and all key cursors are positioned to the
  24.      modified record.
  25.  
  26.      cbputr will fail if one or more of the following is true:
  27.  
  28.      [EINVAL]       cbp is not a valid cbase pointer.
  29.      [EINVAL]       buf is the NULL pointer.
  30.      [CBEDUP]       A field in the record pointed to by buf
  31.                     contains an illegal duplicate key.
  32.      [CBELOCK]      cbp is not write locked.
  33.      [CBENOPEN]     cbp is not open.
  34.      [CBENREC]      The record cursor of cbp is null.
  35.  
  36. SEE ALSO
  37.      cbdelcur, cbgetr, cbinscur, cbrcursor.
  38.  
  39. DIAGNOSTICS
  40.      Upon successful completion, a value of 0 is returned.  Otherwise,
  41.      a value of -1 is returned, and errno set to indicate the error.
  42.  
  43. ------------------------------------------------------------------------------*/
  44. int cbputr(cbp, buf)
  45. cbase_t *cbp;
  46. CONST void *buf;
  47. {
  48.     /* validate arguments */
  49.     if (!cb_valid(cbp)) {
  50.         errno = EINVAL;
  51.         return -1;
  52.     }
  53.  
  54.     /* check if not open */
  55.     if (!(cbp->flags & CBOPEN)) {
  56.         errno = CBENOPEN;
  57.         return -1;
  58.     }
  59.  
  60.     /* check if not write locked */
  61.     if (!(cbp->flags & CBWRLCK)) {
  62.         errno = CBELOCK;
  63.         return -1;
  64.     }
  65.  
  66.     /* check if record cursor is null */
  67.     if (lscursor(cbp->lsp) == NULL) {
  68.         errno = CBENREC;
  69.         return -1;
  70.     }
  71.  
  72.     /* delete current record */
  73.     if (cbdelcur(cbp) == -1) {
  74.         CBEPRINT;
  75.         return -1;
  76.     }
  77.  
  78.     /* back up cursor */
  79.     if (cbrecprev(cbp) == -1) {
  80.         CBEPRINT;
  81.         return -1;
  82.     }
  83.  
  84.     /* insert new record */
  85.     if (cbinscur(cbp, buf) == -1) {
  86.         CBEPRINT;
  87.         return -1;
  88.     }
  89.  
  90.     errno = 0;
  91.     return 0;
  92. }
  93.