home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <dbm.h>
-
- extern struct {
- int dsize;
- char dptr[64];} filename__,key__,key2__;
- extern struct {
- int dsize;
- char dptr[1024];} content__;
- extern int ios__;
- extern int trace__;
-
- dbminit(filename)
- char *filename;
- {
- char *p;
- filename__.dsize = strlen(filename)+4;
- strcpy(filename__.dptr,filename);
- strcat(filename__.dptr,".PAG");
- if (filename__.dptr[0] == '/') { /* of form /etc/file instead of etc:file*/
- strncpy(filename__.dptr,filename__.dptr+1,63);
- for(p = filename__.dptr;*p != '/';p++);
- *p = ':';
- }
- for_open();
- return(-ios__);
- }
-
- dbmclose()
- {
- for_close();
- }
-
- datum fetch(key)
- datum key;
- {
- datum content;
- if (trace__) {
- printf("Looking up :%.*s:",key.dsize,key.dptr);
- }
- key__.dsize = key.dsize;
- bcopy(key.dptr,key__.dptr,key.dsize);
- for_fetch();
- if (ios__ == 0) {
- content.dsize = content__.dsize;
- content.dptr = content__.dptr;
- if (trace__) {
- printf(" - found :%.*s:",content.dsize,content.dptr);
- }
- }
- else {
- content.dsize = 0;
- content.dptr = NULL;
- }
- if (trace__) {
- printf("\n");
- }
- return(content);
- }
-
- store(key,content)
- datum key,content;
- {
- key__.dsize = key.dsize;
- if (key.dsize > 64) {
- printf("Warning - storing key >64 bytes!|n");
- }
- bcopy(key.dptr,key__.dptr,key.dsize);
- content__.dsize = content.dsize;
- if (content.dsize > 1024) {
- printf("Warning - storing content >1024 bytes!|n");
- }
- bcopy(content.dptr,content__.dptr,content.dsize);
- for_store();
- return(-ios__);
- }
-
- xdelete(key)
- datum key;
- {
- key__.dsize = key.dsize;
- bcopy(key.dptr,key__.dptr,key.dsize);
- for_delete();
- return(-ios__);
- }
-
- datum firstkey()
- {
- datum key;
- for_firstkey();
- key.dsize = key__.dsize;
- key.dptr = key__.dptr;
- return(key);
- }
-
- datum nextkey(key)
- datum key;
- {
- datum key2;
- key__.dsize = key.dsize;
- bcopy(key.dptr,key__.dptr,key.dsize);
- for_nextkey();
- if (ios__ == 0) {
- key2.dsize = key2__.dsize;
- key2.dptr = key2__.dptr;
- }
- else {
- key2.dsize = 0;
- key2.dptr = NULL;
- }
- return(key2);
- }
-