home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1995 April / Internet Tools.iso / osi / isode / vmsisode / vmsisode80_tar.Z / vmsisode80_tar / sockit / source / dbm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-11-21  |  2.1 KB  |  113 lines

  1. #include <stdio.h>
  2. #include <dbm.h>
  3.  
  4. extern struct {
  5.         int  dsize;
  6.         char dptr[64];} filename__,key__,key2__;
  7. extern struct {
  8.         int  dsize;
  9.         char dptr[1024];} content__;
  10. extern int ios__;
  11. extern int trace__;
  12.  
  13. dbminit(filename)
  14. char *filename;
  15. {
  16.   char *p;
  17.   filename__.dsize = strlen(filename)+4;
  18.   strcpy(filename__.dptr,filename);
  19.   strcat(filename__.dptr,".PAG");
  20.   if (filename__.dptr[0] == '/') {  /* of form /etc/file instead of etc:file*/
  21.      strncpy(filename__.dptr,filename__.dptr+1,63);
  22.      for(p = filename__.dptr;*p != '/';p++);
  23.      *p = ':';
  24.   }
  25.   for_open();
  26.   return(-ios__);
  27. }
  28.  
  29. dbmclose()
  30. {
  31.   for_close();
  32. }
  33.  
  34. datum fetch(key)
  35. datum key;
  36. {
  37.   datum content;
  38.   if (trace__) {
  39.      printf("Looking up :%.*s:",key.dsize,key.dptr);
  40.   }
  41.   key__.dsize = key.dsize;
  42.   bcopy(key.dptr,key__.dptr,key.dsize);
  43.   for_fetch();
  44.   if (ios__ == 0) {
  45.      content.dsize = content__.dsize;
  46.      content.dptr = content__.dptr;
  47.      if (trace__) {
  48.         printf(" - found :%.*s:",content.dsize,content.dptr);
  49.      }
  50.   }
  51.   else {
  52.      content.dsize = 0;
  53.      content.dptr = NULL;
  54.   }
  55.   if (trace__) {
  56.      printf("\n");
  57.   }
  58.   return(content);
  59. }
  60.  
  61. store(key,content)
  62. datum key,content;
  63. {
  64.   key__.dsize = key.dsize;
  65.   if (key.dsize > 64) {
  66.      printf("Warning - storing key >64 bytes!|n");
  67.   }
  68.   bcopy(key.dptr,key__.dptr,key.dsize);
  69.   content__.dsize = content.dsize;
  70.   if (content.dsize > 1024) {
  71.      printf("Warning - storing content >1024 bytes!|n");
  72.   }
  73.   bcopy(content.dptr,content__.dptr,content.dsize);
  74.   for_store();
  75.   return(-ios__);
  76. }   
  77.  
  78. xdelete(key)
  79. datum key;
  80. {
  81.   key__.dsize = key.dsize;
  82.   bcopy(key.dptr,key__.dptr,key.dsize);
  83.   for_delete();
  84.   return(-ios__);  
  85. }
  86.  
  87. datum firstkey()
  88. {
  89.   datum key;  
  90.   for_firstkey();
  91.   key.dsize = key__.dsize;
  92.   key.dptr  = key__.dptr;
  93.   return(key);
  94. }
  95.  
  96. datum nextkey(key)
  97. datum key;
  98. {
  99.   datum key2;
  100.   key__.dsize = key.dsize;
  101.   bcopy(key.dptr,key__.dptr,key.dsize);
  102.   for_nextkey();
  103.   if (ios__ == 0) {
  104.      key2.dsize = key2__.dsize;
  105.      key2.dptr  = key2__.dptr;
  106.   }
  107.   else {
  108.      key2.dsize = 0;
  109.      key2.dptr = NULL;
  110.   }
  111.   return(key2);
  112. }
  113.