1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
/* ndbm -- ndbm compatibility library in the GNU data base manager, gdbm
January 2000
(c) 2000, Toshihiro Matsui, Electrotechnical Laboratory
cc -c -I/usr/local/eus/include -fpic ndbm.c ; cc -o ndbm.so -shared ndbm.o
*/
#include <ndbm.h>
#include "eus.h"
pointer DBM_OPEN(ctx,n,argv)
register context *ctx;
int n;
register pointer argv[];
{ DBM *dbm;
ckarg(3);
dbm=dbm_open(Getstring(argv[0])->c.str.chars,
ckintval(argv[1]),
ckintval(argv[2]));
return(makeint(dbm));}
pointer DBM_CLOSE(ctx,n,argv)
register context *ctx;
int n;
register pointer argv[];
{ ckarg(1);
dbm_close(ckintval(argv[0]));
return(T);}
pointer DBM_FETCH(ctx,n,argv)
register context *ctx;
int n;
register pointer argv[];
{ register pointer s;
datum key,content;
ckarg(2);
s=Getstring(argv[1]);
key.dptr=(char *)(s->c.str.chars);
key.dsize=strlength(s);
content=dbm_fetch(ckintval(argv[0]), key);
if (content.dptr==NULL) return(NIL);
return(makestring(content.dptr,content.dsize));}
pointer DBM_STORE(ctx,n,argv)
register context *ctx;
int n;
register pointer argv[];
{ register pointer s;
datum key,content;
ckarg(4);
s=Getstring(argv[1]);
key.dptr=(char *)s->c.str.chars;
key.dsize=strlength(s);
s=Getstring(argv[2]);
content.dptr=(char *)s->c.str.chars;
content.dsize=strlength(s);
n=dbm_store(ckintval(argv[0]), key, content, ckintval(argv[3]));
return((n==0)?T:NIL);}
pointer DBM_DELETE(ctx,n,argv)
register context *ctx;
int n;
register pointer argv[];
{ register pointer s;
datum key;
ckarg(2);
s=Getstring(argv[1]);
key.dptr=(char *)s->c.str.chars;
key.dsize=strlength(s);
n=dbm_delete(ckintval(argv[0]), key);
return((n==0)?T:NIL);}
pointer DBM_FIRSTKEY(ctx,n,argv)
register context *ctx;
int n;
register pointer argv[];
{ datum key;
ckarg(1);
key=dbm_firstkey(ckintval(argv[0]));
if (key.dptr==NULL) return(NIL);
return(makestring(key.dptr,key.dsize));}
pointer DBM_NEXTKEY(ctx,n,argv)
context *ctx;
int n;
register pointer argv[];
{ datum key;
ckarg(1);
key=dbm_nextkey(ckintval(argv[0]));
if (key.dptr==NULL) return(NIL);
return(makestring(key.dptr,key.dsize));}
pointer DBM_ERROR(ctx,n,argv)
register context *ctx;
int n;
register pointer argv[];
{ ckarg(1);
n=dbm_error((DBM *)ckintval(argv[0]));
return((n==0)?T:NIL);}
pointer DBM_CLEARERR(ctx,n,argv)
register context *ctx;
int n;
register pointer argv[];
{ ckarg(1);
dbm_clearerr((DBM *)ckintval(argv[0]));
return(T);}
ndbm(context *ctx, int n, pointer argv[])
{ pointer mod=argv[0];
defun(ctx,"DBM-OPEN",mod,DBM_OPEN,NULL);
defun(ctx,"DBM-CLOSE",mod,DBM_CLOSE,NULL);
defun(ctx,"DBM-FETCH",mod,DBM_FETCH,NULL);
defun(ctx,"DBM-STORE",mod,DBM_STORE,NULL);
defun(ctx,"DBM-DELETE",mod,DBM_DELETE,NULL);
defun(ctx,"DBM-FIRSTKEY",mod,DBM_FIRSTKEY,NULL);
defun(ctx,"DBM-NEXTKEY",mod,DBM_NEXTKEY,NULL);
defun(ctx,"DBM-ERROR",mod,DBM_ERROR,NULL);
defun(ctx,"DBM-CLEARERR",mod,DBM_CLEARERR,NULL);
}
|