if(pagf
< 0 || dirf
< 0) {
printf("cannot open database %s\n", file
);
maxbno
= statb
.st_size
*BYTESIZ
-1;
for(hmask
=0;; hmask
=(hmask
<<1)+1) {
dbm_access(calchash(key
));
item
= makdatum(pagbuf
, i
);
if(cmpdatum(key
, item
) == 0) {
item
= makdatum(pagbuf
, i
+1);
printf("items not in pairs\n");
dbm_access(calchash(key
));
item
= makdatum(pagbuf
, i
);
if(cmpdatum(key
, item
) == 0) {
lseek(pagf
, blkno
*PBLKSIZ
, 0);
write(pagf
, pagbuf
, PBLKSIZ
);
dbm_access(calchash(key
));
item
= makdatum(pagbuf
, i
);
if(cmpdatum(key
, item
) == 0) {
i
= additem(pagbuf
, key
);
if(additem(pagbuf
, dat
) < 0) {
lseek(pagf
, blkno
*PBLKSIZ
, 0);
write(pagf
, pagbuf
, PBLKSIZ
);
if(key
.dsize
+dat
.dsize
+2*sizeof(short) >= PBLKSIZ
) {
printf("entry too big\n");
item
= makdatum(pagbuf
, i
);
if(calchash(item
) & (hmask
+1)) {
item
= makdatum(pagbuf
, i
);
printf("split not paired\n");
lseek(pagf
, blkno
*PBLKSIZ
, 0);
write(pagf
, pagbuf
, PBLKSIZ
);
lseek(pagf
, (blkno
+hmask
+1)*PBLKSIZ
, 0);
write(pagf
, ovfbuf
, PBLKSIZ
);
item
= makdatum(pagbuf
, i
);
if(cmpdatum(key
, item
) <= 0)
if(f
|| cmpdatum(bitem
, item
) < 0) {
bitem
= makdatum(pagbuf
, 0);
item
= makdatum(pagbuf
, i
);
if(cmpdatum(bitem
, item
) < 0)
for(hmask
=0;; hmask
=(hmask
<<1)+1) {
lseek(pagf
, blkno
*PBLKSIZ
, 0);
read(pagf
, pagbuf
, PBLKSIZ
);
lseek(dirf
, (long)b
*DBLKSIZ
, 0);
read(dirf
, dirbuf
, DBLKSIZ
);
lseek(dirf
, (long)b
*DBLKSIZ
, 0);
write(dirf
, dirbuf
, DBLKSIZ
);
item
.dsize
= t
- sp
[n
+1];
055,043,036,054,063,014,004,005,
010,064,077,000,035,027,025,071,
= { 61, 57, 53, 49, 45, 41, 37, 33,
29, 25, 21, 17, 13, 9, 5, 1,
06100151277L,06106161736L,06452611562L,05001724107L,
02614772546L,04120731531L,04665262210L,07347467531L,
06735253126L,06042345173L,03072226605L,01464164730L,
03247435524L,07652510057L,01546775256L,05714532133L,
06173260402L,07517101630L,02431460343L,01743245566L,
00261675137L,02433103631L,03421772437L,04447707466L,
04435620103L,03757017115L,03641531772L,06767633246L,
02673230344L,00260612216L,04133454451L,00615531516L,
06137717526L,02574116560L,02304023373L,07061702261L,
05153031405L,05322056705L,07401116734L,06552375715L,
06165233473L,05311063631L,01212221723L,01052267235L,
06000615237L,01075222665L,06330216006L,04402355630L,
01451177262L,02000133436L,06025467062L,07121076461L,
03123433522L,01010635225L,01716177066L,05161746527L,
01736635071L,06243505026L,03637211610L,01756474365L,
04723077174L,03642763134L,05750130273L,03655541561L,
for(i
=0; i
<item
.dsize
; i
++) {
for(j
=0; j
<BYTESIZ
; j
+=4) {
hashl
+= hltab
[hashi
&63];
for(i1
=n
+1; i1
<sp
[0]; i1
++)
sp
[i1
+1-1] = sp
[i1
+1] + i2
;
i2
= (sp
[0]+2) * sizeof(short);
for(i2
=0; i2
<item
.dsize
; i2
++) {
if(t
< (sp
[0]+1)*sizeof(short))