-- file: ZoneAllocDefs.Mesa

-- edited by McCreight, January 7, 1982  10:33 AM
-- edited by gene on March 6, 1981  5:14 PM

-- Copyright  Xerox Corporation 1979, 1980, 1981, 1982

ZoneAllocDefs: DEFINITIONS =
  BEGIN

  uz: UNCOUNTED ZONE;
  mdsz: MDSZone;

  GetAnXMZone: PROCEDURE [
    pagesPerExtension: CARDINAL ← 10, -- added segments are of this size
    largeSize: CARDINAL ← 1024, -- > largeSize is allocated as a segment
    checkSegments, checkHeap: BOOLEAN ← FALSE
    ]
    RETURNS [UNCOUNTED ZONE];

  DestroyAnXMZone: PROCEDURE [z: UNCOUNTED ZONE]
    RETURNS [UNCOUNTED ZONE];

  XMZoneWordsInUse: PROCEDURE[z: UNCOUNTED ZONE] RETURNS[LONG INTEGER];

  GetTheMDSZone: PROCEDURE RETURNS [MDSZone];

  GetXMAllocatorProcs: PROCEDURE
    RETURNS [
      palloc: PROC [z: UNCOUNTED ZONE, l: CARDINAL] RETURNS [lp: LONG POINTER],
      pfree: PROC [z: UNCOUNTED ZONE, lp: LONG POINTER]];

-- Procedures to aid debugging

  ZoneSegments: PROCEDURE[z: UNCOUNTED ZONE
    ] RETURNS[small, large: LONG INTEGER];

  InXMZone: PROCEDURE[z: UNCOUNTED ZONE,
    lp: LONG POINTER] RETURNS[BOOLEAN];

  MustBeInXMZone: PROCEDURE[z: UNCOUNTED ZONE,
    lp: LONG POINTER] = INLINE
    {IF NOT InXMZone[z, lp] THEN
      SIGNAL MalformedXMZone};

  MalformedXMZone: SIGNAL;

  END.