+#
+/*
+ * Copyright 1973 Bell Telephone Laboratories Inc
+ */
+
+struct map {
+ char *m_size;
+ char *m_addr;
+};
+
+malloc(mp, size)
+struct map *mp;
+{
+ register int a;
+ register struct map *bp;
+
+ for (bp = mp; bp->m_size; bp++) {
+ if (bp->m_size >= size) {
+ a = bp->m_addr;
+ bp->m_addr =+ size;
+ if ((bp->m_size =- size) == 0)
+ do {
+ bp++;
+ (bp-1)->m_addr = bp->m_addr;
+ } while ((bp-1)->m_size = bp->m_size);
+ return(a);
+ }
+ }
+ return(0);
+}
+
+mfree(mp, size, aa)
+struct map *mp;
+{
+ register struct map *bp;
+ register int t;
+ register int a;
+
+ a = aa;
+ for (bp = mp; bp->m_addr<=a && bp->m_size!=0; bp++);
+ if (bp>mp && (bp-1)->m_addr+(bp-1)->m_size == a) {
+ (bp-1)->m_size =+ size;
+ if (a+size == bp->m_addr) {
+ (bp-1)->m_size =+ bp->m_size;
+ while (bp->m_size) {
+ bp++;
+ (bp-1)->m_addr = bp->m_addr;
+ (bp-1)->m_size = bp->m_size;
+ }
+ }
+ } else {
+ if (a+size == bp->m_addr && bp->m_size) {
+ bp->m_addr =- size;
+ bp->m_size =+ size;
+ } else if (size) do {
+ t = bp->m_addr;
+ bp->m_addr = a;
+ a = t;
+ t = bp->m_size;
+ bp->m_size = size;
+ bp++;
+ } while (size = t);
+ }
+}