+ //}
+ 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;
+ gvar->mm.mmnew->useptr = NULL;
+
+ gvar->mm.mmnew->next = scan->next;
+ scan->next = gvar->mm.mmnew;
+ gvar->mm.mmnew->start = segstart+seglength;
+ gvar->mm.mmnew->length = extra;
+ gvar->mm.mmnew->attributes = LOCKBIT;
+ }//else if(segm>0) goto segu;
+
+}*/
+void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar)
+{
+ mmblocktype far *scan,far *last;
+ word oldend;
+ sdword extra;
+ //word segm=1;
+
+ scan = last = gvar->mm.mmhead;
+ gvar->mm.mmrover = gvar->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;