home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c004 / 1.ddi / CTICRE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-04-18  |  2.7 KB  |  116 lines

  1. /*
  2.  *    incremental isam file create
  3.  *
  4.  *    This program is the CONFIDENTIAL and PROPRIETARY property 
  5.  *    of FairCom(R) Corporation. Any unauthorized use, reproduction or
  6.  *    transfer of this program is strictly prohibited.
  7.  *
  8.  *    Copyright (c) 1987, 1988, 1989 FairCom Corporation
  9.  *    (Subject to limited distribution and
  10.  *     restricted disclosure only.)
  11.  *    *** ALL RIGHTS RESERVED ***
  12.  *
  13.  *    4006 West Broadway
  14.  *    Columbia, MO 65203
  15.  *
  16.  *
  17.  *    c-tree(R)    Version 4.3
  18.  *            Release C
  19.  *            February 7, 1989 17:30
  20.  *
  21.  */
  22.  
  23. #include "ctstdr.h"
  24. #include "ctoptn.h"
  25. #include "ctstrc.h"
  26. #include "ctgvar.h"
  27. #include "ctisam.h"
  28. #include "ctifil.h"
  29. #include "cterrc.h"
  30.  
  31. #ifdef RTREE
  32. #include "rtpars.h"
  33. #include "rtstrc.h"
  34.  
  35. EXTERN RDAT  usrdat[];
  36. #endif
  37.  
  38.  
  39. COUNT CREIFIL(ifilptr)
  40. PFAST IFIL   *ifilptr;
  41. {
  42.     COUNT         filno,i;
  43.     TEXT         nambuf[MAX_NAME + 4];
  44.     FAST IIDX   *idxp;
  45.     COUNT         ierr(),filrng(),setimap(),CREDAT(),CREIDX();
  46.     COUNT         CREMEM(),CLSFIL();
  47.  
  48.     isam_err = 0;
  49.     if ((filno = filrng(ifilptr)) < 0)
  50.         return(-filno);
  51.     else if (ifilptr->dnumidx > MAX_DAT_KEY)
  52.         return(ierr(IDRK_ERR,filno));
  53.     if ((i = strlen(ifilptr->pfilnam)) > MAX_NAME)
  54.         i = MAX_NAME;
  55.     cpybuf(nambuf,ifilptr->pfilnam,i);
  56.     cpybuf(nambuf + i,DAT_EXTENT,strlen(DAT_EXTENT) + 1);
  57.     if (CREDAT(filno,nambuf,ifilptr->dreclen,ifilptr->dxtdsiz,
  58.         ifilptr->dfilmod))
  59.         return(ierr(uerr_cod,filno));
  60.     ifilptr->tfilno = filno;
  61.  
  62.     if (ifilptr->dnumidx > 0) {
  63.         cpybuf(nambuf + i,IDX_EXTENT,strlen(IDX_EXTENT) + 1);
  64.         idxp =    ifilptr->ix;
  65.         i    =    CREIDX(filno + 1,nambuf,idxp->ikeylen,idxp->ikeytyp,
  66.             idxp->ikeydup,ifilptr->dnumidx - 1,ifilptr->ixtdsiz,
  67.             ifilptr->ifilmod);
  68.         if (i) {
  69.             ifilptr->tfilno = -1;
  70.             cpybuf(nambuf,(ct_key + filno)->flname,MAX_NAME);
  71.             CLSFIL(filno,ifilptr->dfilmod);
  72.             remove(nambuf);
  73.             return(ierr(i,filno + 1));
  74.         }
  75.         /* host index */
  76.         if (setimap(0,ifilptr))
  77.             goto err_creifil;
  78.         ct_dtmap[filno + 1] = YES + 2;
  79.     } else
  80.         ct_kymap[filno][0]  = -1;
  81.  
  82.     ct_dtmap[filno] = YES + 2;
  83.  
  84. #ifdef RTREE
  85.     usrdat[filno].fldnam[1] = ifilptr->rfstfld;
  86.     usrdat[filno].fldnam[2] = ifilptr->rlstfld;
  87. #endif
  88.  
  89.     /* index members */
  90.     for (i = 1; i < ifilptr->dnumidx; i++) {
  91.         idxp = &ifilptr->ix[i];
  92.         if (CREMEM(filno + 1,idxp->ikeylen,idxp->ikeytyp,
  93.             idxp->ikeydup,i)) {
  94.             ierr(uerr_cod,filno + i + 1);
  95.             goto err_creifil;
  96.         } else if (setimap(i,ifilptr))
  97.             goto err_creifil;
  98.     }
  99.     if (i < MAX_DAT_KEY)
  100.         ct_kymap[filno][i] = -1;
  101.  
  102.     return(NO_ERROR);
  103.  
  104. err_creifil:
  105.     ifilptr->tfilno = -1;
  106.     for (i = filno; i <= filno + 1; i++) {
  107.         ct_dtmap[i] = NO;
  108.         cpybuf(nambuf,(ct_key + i)->flname,MAX_NAME);
  109.         CLSFIL(i,ifilptr->dfilmod);
  110.         remove(nambuf);
  111.     }
  112.     return(isam_err);
  113. }
  114.  
  115. /* end of cticre.c */
  116.