+IDL mdb_midl_alloc()
+{
+ IDL ids = malloc((MDB_IDL_UM_MAX+1) * sizeof(ID));
+ *ids++ = MDB_IDL_UM_MAX;
+ return ids;
+}
+
+void mdb_midl_free(IDL ids)
+{
+ free(ids-1);
+}
+
+int mdb_midl_shrink( IDL *idp )
+{
+ IDL ids = *idp;
+ if (ids[-1] > MDB_IDL_UM_MAX) {
+ ids = realloc(ids, (MDB_IDL_UM_MAX+1) * sizeof(ID));
+ *ids++ = MDB_IDL_UM_MAX;
+ *idp = ids;
+ return 1;
+ }
+ return 0;
+}
+
+int mdb_midl_append( IDL *idp, ID id )