home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 170_01 / isamopn.c < prev    next >
Text File  |  1979-12-31  |  2KB  |  86 lines

  1. /*
  2. **                 ISAMC - Written by John M. Dashner
  3. */
  4.  
  5. #include <stdio.h>
  6. #include <ctype.h>
  7.  
  8. #include <isam.h>
  9.  
  10. /*
  11. **                  OPEN - Open an ISAM Index
  12. */
  13.  
  14. struct isam *isamopn(name, keylen)
  15. char *name;
  16. int  keylen;
  17. {
  18.     int i, fp;
  19.     struct isam *hdr;
  20.     struct rec1 *r1;
  21.     struct rec2 *r2;
  22.     char buf[MAXKEY + 2];
  23.  
  24.     isam_err = 0;
  25.     r1 = (struct rec1 *) buf;
  26.     r2 = (struct rec2 *) r1;
  27.  
  28.     if((keylen < MINKEY) || (keylen > MAXKEY))
  29.     {
  30.         isam_err = 4;
  31.         return ERROR;
  32.     }
  33.     if((fp = open(name, 2)) == ERROR)
  34.     {
  35.         if((fp = creat(name, 6)) == ERROR)
  36.         {
  37.             isam_err = 8;
  38.             return ERROR;
  39.         }
  40.         r1->ttl_recs = 2;
  41.         r1->del_recs = 0;
  42.         lseek(fp, 0L, 0);
  43.         for(i=0; i<2; i++)
  44.             if(write(fp, buf, keylen + 2) == ERROR)
  45.             {
  46.                 isam_err = 8;
  47.                 free(hdr);
  48.                 return ERROR;
  49.             }
  50.         close(fp);
  51.         hdr = isamopn(name, keylen);
  52.         isam_err = 7;
  53.         return(hdr);
  54.     }
  55.     if((hdr = (struct isam *) malloc(sizeof(struct isam))) == NULL)
  56.     {
  57.         isam_err = 9;
  58.         return ERROR;
  59.     }
  60.     if(isam_err == 0)
  61.     {
  62.         lseek(fp, 0L, 0);
  63.         if(read(fp, buf, keylen + 2) == ERROR)
  64.         {
  65.             isam_err = 8;
  66.             free(hdr);
  67.             return ERROR;
  68.         }
  69.         hdr->q1 = r1->ttl_recs;
  70.         hdr->q2 = r1->del_recs;
  71.         if(read(fp, buf, keylen + 2) == ERROR)
  72.         {
  73.             isam_err = 8;
  74.             free(hdr);
  75.             return ERROR;
  76.         }
  77.         hdr->q3 = r2->srt_recs;
  78.         hdr->q4 = 2;
  79.         hdr->q5 = 0;
  80.         hdr->q6 = keylen;
  81.         hdr->q7 = fp;
  82.         return hdr;
  83.     }
  84. }
  85.  
  86.