home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 228_01 / isamopn.c < prev    next >
Text File  |  1987-07-31  |  2KB  |  99 lines

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