static int removeStrKey(Page pg, int r)
    {
        int len = getKeyStrSize(pg, r)*2;
        int offs = getKeyStrOffs(pg, r);
        int size = getSize(pg);
        int nItems = getnItems(pg);
        if ((nItems+1)*strKeySize >= keySpace) { 
            memcpy(pg, r, pg, r+1, nItems-r-1, strKeySize);
        } else { 
            memcpy(pg, r, pg, r+1, nItems-r, strKeySize);
        } 
        if (len != 0) { 
            memcpy(pg, keySpace - size + len, pg, keySpace - size, size - keySpace + offs, 1);
            for (int i = nItems; --i >= 0; ) { 
                if (getKeyStrOffs(pg, i) < offs) { 
                    setKeyStrOffs(pg, i, getKeyStrOffs(pg, i) + len);
                }
            }
            setSize(pg, size -= len);
        }
        setnItems(pg, nItems - 1);
        return size + strKeySize*nItems < keySpace/3 
            ? Btree.op_underflow : Btree.op_done;
    }