-- Clipper.mesa -- Last changed by Doug Wyatt, September 19, 1980 10:05 AM DIRECTORY Area USING [Handle], Pipe USING [Handle, Sink]; Clipper: DEFINITIONS IMPORTS Pipe = { Handle: TYPE = LONG POINTER TO Object; State: TYPE = RECORD[in,out: BOOLEAN]; NewClipper: PROC RETURNS[Handle]; NewPipe: PROC[self: Handle, ipipe,opipe: Pipe.Handle _ Pipe.Sink[]] RETURNS[Pipe.Handle] = INLINE { RETURN[self.procs.NewPipe[self,ipipe,opipe]] }; Push: PROC[self: Handle, area: Area.Handle] = INLINE { self.procs.Push[self,area] }; Pop: PROC[self: Handle] = INLINE { self.procs.Pop[self] }; Test: PROC[self: Handle] RETURNS[State] = INLINE { RETURN[self.procs.Test[self]] }; NewRegion: PROC[self: Handle] RETURNS[Pipe.Handle] = INLINE { RETURN[self.procs.NewRegion[self]] }; Copy: PROC[self: Handle] RETURNS[Handle] = INLINE { RETURN[self.procs.Copy[self]] }; Free: PROC[selfPtr: LONG POINTER TO Handle] = INLINE { self: Handle=selfPtr^; selfPtr^_NIL; self.procs.Free[self] }; -- Actual representation for a Clipper interface Object: PRIVATE TYPE = RECORD [ procs: LONG POINTER TO READONLY Procs, data: LONG POINTER TO Data ]; Procs: PRIVATE TYPE = RECORD [ NewPipe: PROC[self: Handle, ipipe,opipe: Pipe.Handle] RETURNS[Pipe.Handle], Push: PROC[self: Handle, area: Area.Handle], Pop: PROC[self: Handle], Test: PROC[self: Handle] RETURNS[State], NewRegion: PROC[self: Handle] RETURNS[Pipe.Handle], Copy: PROC[self: Handle] RETURNS[Handle], Free: PROC[self: Handle] ]; Data: PRIVATE TYPE; ClipperImpl: PROGRAM; }.(670)