MimZonePort: DEFINITIONS = BEGIN UZone: TYPE = UNCOUNTED ZONE; AllocProc: TYPE = PROC [self: UZone, size: CARDINAL] RETURNS [LONG POINTER]; FreeProc: TYPE = PROC [LONG POINTER]; UZoneProcs: TYPE = RECORD [alloc: AllocProc, free: FreeProc]; UZoneProcsPtr: TYPE = LONG POINTER TO UZoneProcs; OldUZone: TYPE = LONG POINTER TO UZoneProcsPtr; NewUZone: TYPE = LONG POINTER TO UZoneProcs; ScratchPtr: TYPE = LONG POINTER TO Scratch; Scratch: TYPE = ARRAY [0..WORDS[UZoneProcs]+WORDS[UZoneProcsPtr]) OF WORD; MakeZone: PROC [alloc: AllocProc, free: FreeProc, scratch: ScratchPtr] RETURNS [UZone] = INLINE { up: UZoneProcsPtr; IF BITS[WORD] = 16 THEN { oz: OldUZone = LOOPHOLE[scratch]; up ¬ LOOPHOLE[scratch+SIZE[UZoneProcsPtr]]; oz­ ¬ up; } ELSE { up ¬ LOOPHOLE[scratch]; }; up.alloc ¬ alloc; up.free ¬ free; RETURN [LOOPHOLE[scratch]]; }; END. Ά MimZonePort.mesa Copyright Σ 1988, 1991 by Xerox Corporation. All rights reserved. Russ Atkinson (RRA) October 11, 1988 11:25:43 am PDT Old style of zone New style of zone Κύ–(cedarcode) style•NewlineDelimiter ™code™Kšœ Οeœ7™BK™4K™—KšΟn œΟk œŸ˜ K˜šœŸœŸ œŸœ˜K˜—Kš œ ŸœŸœŸœŸœŸœŸœ˜LKš œ ŸœŸœŸœŸœ˜%Kšœ ŸœŸœ$˜=š œŸœŸœŸœŸœ ˜1K˜—Kš œ ŸœŸœŸœŸœ˜/K˜Kš œ ŸœŸœŸœŸœ ˜,K˜Kš œ ŸœŸœŸœŸœ ˜+š œ ŸœŸœŸœ ŸœŸœŸœ˜JK˜—šžœŸœ9Ÿœ Ÿœ˜aKšœ˜šŸœŸœŸœ˜šŸœ˜K™KšœŸœ ˜!KšœŸœ Ÿœ˜+Kšœ ˜ K˜—šŸœ˜K™KšœŸœ ˜K˜——Kšœ˜Kšœ˜KšŸœŸœ ˜K˜K˜—KšŸœ˜K˜—…—P