/* Extracted from the sdm module in perl.  */
typedef struct {
	char *dptr;
	int dsize;
} datum;
extern long sdbm_hash  (char *, int)  ;
extern void  sdbm__putpair   (char *, datum, datum)  ;
void
sdbm__splpage (char *pag, char *New, long int sbit)
{
	datum key;
	datum val;
	register int n;
	register int off = 1024 ;
	char cur[1024 ];
	register short *ino = (short *) cur;
	(void) memcpy(cur, pag, 1024 );
	(void) ({ void *__s = ( pag ); __builtin_memset ( __s , '\0',     1024   ) ; __s; });
	(void) ({ void *__s = ( New ); __builtin_memset ( __s , '\0',     1024   ) ; __s; });
	n = ino[0];
	for (ino++; n > 0; ino += 2) {
		key.dptr = cur + ino[0]; 
		key.dsize = off - ino[0];
		val.dptr = cur + ino[1];
		val.dsize = ino[0] - ino[1];
		(void) sdbm__putpair ((sdbm_hash(( key ).dptr, ( key ).dsize)  & sbit) ? New : pag, key, val);
		off = ino[1];
		n -= 2;
	}
}
