+#if NEW
+void zebra_rec_keys_write(zebra_rec_keys_t keys,
+ const char *str, size_t slen,
+ const struct it_key *key)
+{
+ char *dst;
+ const char *src = (char*) key;
+
+ struct zebra_rec_word_entry **wep;
+ struct zebra_rec_key_entry **kep;
+ int ord = key->mem[0];
+ int seq = key->mem[key->len-1];
+
+ assert(keys->owner_of_buffer);
+
+ wep = zebra_rec_keys_mk_hash(keys, str, slen, ord);
+
+ while (*wep)
+ {
+ struct zebra_rec_word_entry *e = *wep;
+ if (ord == e->ord && slen == e->len && !memcmp(str, e->buf, slen))
+ break;
+ wep = &(*wep)->next;
+ }
+
+ if (!*wep)
+ {
+ *wep = nmem_malloc(keys->nmem, sizeof(**wep));
+ (*wep)->buf = nmem_malloc(keys->nmem, slen);
+ memcpy((*wep)->buf, str, slen);
+ (*wep)->len = slen;
+ (*wep)->ord = ord;
+ (*wep)->next = 0;
+ (*wep)->keys = 0;
+ (*wep)->max_seq = 0;
+ (*wep)->last_key = &(*wep)->keys;
+ }
+ if (seq > (*wep)->max_seq)
+ kep = (*wep)->last_key;
+ else
+ {
+ kep = &(*wep)->keys;
+ while (*kep)
+ {
+ if (!key_compare(key, &(*kep)->key))
+ return;
+ kep = &(*kep)->next;
+ }
+ }
+ *kep = nmem_malloc(keys->nmem, sizeof(**kep));
+ (*kep)->next = 0;
+ (*wep)->last_key = &(*kep)->next;
+ memcpy(&(*kep)->key, key, sizeof(*key));
+ if (seq > (*wep)->max_seq)
+ {
+ (*wep)->max_seq = seq;
+ }
+}
+#else