DIRECTORY Environment, Space, PDInterpSysCalls; PDInterpSysCallsCedar4Impl: MONITOR IMPORTS Space EXPORTS PDInterpSysCalls ~ BEGIN spaces: LIST OF Space.Handle; AllocateSpace: PUBLIC ENTRY PROC [words: INT] RETURNS [LONG POINTER] ~ { ENABLE UNWIND => NULL; pages: CARDINAL _ (words+Environment.wordsPerPage)/Environment.wordsPerPage; space: Space.Handle _ Space.Create[size: pages, parent: Space.virtualMemory]; Space.Map[space]; IF pages > 16 THEN Space.CreateUniformSwapUnits[16, space]; spaces _ CONS[space, spaces]; RETURN [Space.LongPointer[space]]; }; FreeSpace: PUBLIC ENTRY PROC [pointer: LONG POINTER] ~ { ENABLE UNWIND => NULL; prev: LIST OF Space.Handle _ NIL; FOR s: LIST OF Space.Handle _ spaces, s.rest UNTIL s = NIL DO IF Space.LongPointer[s.first] = pointer THEN { Space.Delete[s.first]; IF prev = NIL THEN spaces _ s.rest ELSE prev.rest _ s.rest; RETURN; }; prev _ s; ENDLOOP; BadFreeSpaceRequest[]; }; BadFreeSpaceRequest: PUBLIC ERROR ~ CODE; END. PPDInterpSysCallsCedar4Impl.mesa Michael Plass, November 17, 1983 2:16 pm Ę˝˜Jšœ™J™(JšĎk œ&˜/šœ˜#Jšœ˜ Jšœ˜—Jšœ˜J˜šœœœ˜J˜—šĎn œœœœ œœœœ˜HJšœœœ˜Jšœœ=˜LJšœM˜MJšœ˜Jšœ œ)˜;Jšœ œ˜Jšœ˜"Jšœ˜J˜—š ž œœœœ œœ˜8Jšœœœ˜Jšœœœœ˜!š œœœœœ˜=šœ&œ˜.Jšœ˜Jšœœœœ˜;Jšœ˜Jšœ˜—Jšœ ˜ Jšœ˜—Jšœ˜Jšœ˜J˜—šœœœœ˜)J˜—Jšœ˜—…—ÎŰ