+ //}
+ printf("segm=%u ", segm);
+ printf("ex=%lu ", extra);
+ printf("old=%u ", oldend);
+ printf("start+seglen=%lu\n", segstart+seglength);
+ printf("segsta=%x ", segstart);
+ printf("len=%lu ", scan->length);
+ printf("seglen=%lu ", seglength);
+ printf("segmlen=%lu\n", segmlen);
+ }
+//++++todo: linked list of segment!
+ if(segstart == scan->start)
+ {
+ last->next = scan->next; // unlink block
+ FREEBLOCK(scan);
+ scan = last;
+ }
+ else
+ scan->length = segstart-scan->start; // shorten block
+
+ if(extra > 0)
+ {
+ GETNEWBLOCK;
+ mm->mmnew->useptr = NULL;
+
+ mm->mmnew->next = scan->next;
+ scan->next = mm->mmnew;
+ mm->mmnew->start = segstart+seglength;
+ mm->mmnew->length = extra;
+ mm->mmnew->attributes = LOCKBIT;
+ }//else if(segm>0) goto segu;
+
+}*/
+void MML_UseSpace(word segstart, dword seglength, mminfo_t *mm)
+{
+ mmblocktype far *scan,far *last;
+ word oldend;
+ sdword extra;
+ //word segm=1;
+
+ scan = last = mm->mmhead;
+ mm->mmrover = mm->mmhead; // reset rover to start of memory
+
+//
+// search for the block that contains the range of segments
+//
+ while (scan->start+scan->length < segstart)
+ {
+ last = scan;
+ scan = scan->next;