DIRECTORY Core, CoreIO, Pipal, PipalInt, PipalMos, PipalIO, PipalMosIO; PipalMosIOImpl: CEDAR PROGRAM IMPORTS CoreIO, Pipal, PipalInt, PipalIO, PipalMos = BEGIN OPEN CoreIO, PipalIO; ReadObjects: PROC [h: Handle, size: NAT] RETURNS [objects: Pipal.Objects _ NIL] = { THROUGH [0 .. size) DO objects _ CONS [ReadObject[h], objects] ENDLOOP; RETURN [Pipal.Reverse[objects]]; }; WriteOverlay: ClassWriteProc = { overlay: Pipal.Overlay _ NARROW [object]; WriteInt[h, overlay.size]; FOR i: NAT IN [0 .. overlay.size) DO WriteObject[h, overlay[i]] ENDLOOP; }; ReadOverlay: ClassReadProc = { size: NAT = ReadInt[h]; object _ Pipal.CreateOverlay[ReadObjects[h, size]]; }; WriteIcon: ClassWriteProc = { icon: Pipal.Icon _ NARROW [object]; WriteObject[h, icon.reference]; WriteObject[h, icon.referent]; }; ReadIcon: ClassReadProc = { reference: Pipal.Object _ ReadObject[h]; referent: Pipal.Object _ ReadObject[h]; object _ Pipal.CreateIcon[reference, referent]; }; WriteAnnotation: ClassWriteProc = { annotation: Pipal.Annotation _ NARROW [object]; WriteAtom[h, annotation.key]; IF annotation.value=NIL THEN WriteAtom[h, $Nil] ELSE WITH annotation.value SELECT FROM atom: ATOM => { WriteAtom[h, $Atom]; WriteAtom[h, atom]; }; rope: Pipal.ROPE => { WriteAtom[h, $Rope]; WriteRope[h, rope]; }; refRect: REF PipalInt.Rectangle => { WriteAtom[h, $Rectangle]; WriteRectangle[h, refRect^]; }; ENDCASE => ERROR; WriteObject[h, annotation.child]; }; ReadAnnotation: ClassReadProc = { key: ATOM _ ReadAtom[h]; valueKey: ATOM _ ReadAtom[h]; value: REF _ SELECT valueKey FROM $Nil => NIL, $Atom => ReadAtom[h], $Rope => ReadRope[h], $Rectangle => NEW [PipalInt.Rectangle _ ReadRectangle[h]], ENDCASE => ERROR; object _ Pipal.CreateAnnotation[ReadObject[h], key, value]; }; WriteTransform: ClassWriteProc = { trans: PipalInt.Transformation; sub: Pipal.Object _ NIL; EachChild: PipalInt.EachChildProc = { IF sub#NIL THEN ERROR; sub _ child; trans _ transformation; }; IF PipalInt.Enumerate[object, EachChild] THEN ERROR; IF sub=NIL THEN ERROR; WriteTransformation[h, trans]; WriteObject[h, sub]; }; ReadTransform: ClassReadProc = { transformation: PipalInt.Transformation _ ReadTransformation[h]; object _ PipalInt.TransformObject[transformation, ReadObject[h]]; }; WriteAbut: ClassWriteProc = { abut: PipalInt.Abut _ NARROW [object]; WriteBool[h, abut.inX]; WriteInt[h, abut.size]; FOR i: NAT IN [0 .. abut.size) DO WriteObject[h, abut[i]] ENDLOOP; }; ReadAbut: ClassReadProc = { inX: BOOL = ReadBool[h]; size: NAT = ReadInt[h]; object _ PipalInt.CreateAbut[inX, ReadObjects[h, size]]; }; WriteBox: ClassWriteProc = { box: PipalMos.Box = NARROW [object]; WriteVector[h, box.size]; WriteAtom[h, box.layer]; }; ReadBox: ClassReadProc = { size: PipalInt.Size = ReadVector[h]; layer: PipalMos.Layer = ReadAtom[h]; RETURN [PipalMos.CreateBox[size, layer]] }; WriteStar: ClassWriteProc = { star: PipalMos.Star _ NARROW [object]; WriteBool[h, star.overlayStar]; WriteObject[h, star.master]; WriteInt[h, star.size]; FOR i: NAT IN [0 .. star.size) DO WriteObject[h, star[i]] ENDLOOP; }; ReadStar: ClassReadProc = { overlayStar: BOOL _ ReadBool[h]; master: Pipal.Object _ ReadObject[h]; size: NAT = ReadInt[h]; object _ PipalMos.CreateStar[master, ReadObjects[h, size], overlayStar]; }; WriteRouting: ClassWriteProc = { routing: PipalMos.Routing _ NARROW [object]; WriteInt[h, routing.size]; FOR i: NAT IN [0 .. routing.size) DO WriteObject[h, routing[i]] ENDLOOP; }; ReadRouting: ClassReadProc = { size: NAT = ReadInt[h]; object _ PipalMos.CreateRouting[ReadObjects[h, size]]; }; WriteTiling: ClassWriteProc = { tiling: PipalMos.Tiling _ NARROW [object]; WriteInt[h, tiling.sizeX]; WriteInt[h, tiling.sizeY]; FOR y: NAT IN [0 .. tiling.sizeY) DO FOR x: NAT IN [0 .. tiling.sizeX) DO WriteObject[h, tiling.xyTile[x, y, tiling.data]] ENDLOOP; ENDLOOP; }; TileArrayRec: TYPE = RECORD [SEQUENCE sizeY: NAT OF REF TileLinesRec]; TileLinesRec: TYPE = RECORD [SEQUENCE sizeX: NAT OF Pipal.Object]; TileArrayXY: PipalMos.XYTileProc = { tileArray: REF TileArrayRec _ NARROW [data]; RETURN [tileArray[y][x]]; }; ReadTiling: ClassReadProc = { sizeX: NAT _ NAT [ReadInt[h]]; sizeY: NAT _ NAT [ReadInt[h]]; tileArray: REF TileArrayRec _ NEW [TileArrayRec[sizeY]]; FOR y: NAT IN [0 .. sizeY) DO tileArray[y] _ NEW [TileLinesRec[sizeX]]; FOR x: NAT IN [0 .. sizeX) DO tileArray[y][x] _ ReadObject[h] ENDLOOP; ENDLOOP; object _ PipalMos.CreateTiling[sizeX, sizeY, TileArrayXY, tileArray]; }; WriteMarker: ClassWriteProc = { marker: PipalMos.Marker = NARROW [object]; WriteVector[h, marker.size]; WriteAtom[h, marker.layer]; }; ReadMarker: ClassReadProc = { size: PipalInt.Size = ReadVector[h]; layer: PipalMos.Layer = ReadAtom[h]; RETURN [PipalMos.CreateMarker[size, layer]] }; WriteText: ClassWriteProc = { ERROR; }; ReadText: ClassReadProc = { ERROR; }; WritePicture: ClassWriteProc = { ERROR; }; ReadPicture: ClassReadProc = { ERROR; }; RegisterClass[Pipal.overlayClass, WriteOverlay, ReadOverlay]; RegisterClass[Pipal.iconClass, WriteIcon, ReadIcon]; RegisterClass[Pipal.annotationClass, WriteAnnotation, ReadAnnotation]; RegisterClass[PipalInt.transformClass, WriteTransform, ReadTransform]; RegisterClass[PipalInt.translationClass, WriteTransform, ReadTransform]; RegisterClass[PipalInt.orientClass, WriteTransform, ReadTransform]; RegisterClass[PipalInt.abutClass, WriteAbut, ReadAbut]; RegisterClass[PipalMos.boxClass, WriteBox, ReadBox]; RegisterClass[PipalMos.starClass, WriteStar, ReadStar]; RegisterClass[PipalMos.routingClass, WriteRouting, ReadRouting]; RegisterClass[PipalMos.tilingClass, WriteTiling, ReadTiling]; RegisterClass[PipalMos.markerClass, WriteMarker, ReadMarker]; RegisterClass[PipalMos.textClass, WriteText, ReadText]; RegisterClass[PipalMos.textClass, WritePicture, ReadPicture]; END. .PipalMosIOImpl.mesa Copyright Σ 1986, 1987, 1988 by Xerox Corporation. All rights reserved. Bertrand Serlet March 31, 1988 10:06:01 pm PST Barth, December 4, 1986 6:01:02 pm PST Utility Overlay Icon Annotation All Transformations Abut Box Star Routing Tiling Marker Text Picture Initialization Κ£˜– "Cedar" stylešœ™Icode– "Cedar" stylešœH™HKšœ.™.Kšœ#Οk™&J˜—š œ˜ Jšœ˜Jšœ/˜/J˜—šΟnœœœ˜Jšœ-˜4Jšœœ˜—head™š ž œœœœœ˜SKšœ œ œœ˜GKšœ˜ Kšœ˜——™šž œ˜ Kšœœ ˜)K˜Kš œœœœœ˜HK˜K˜—šž œ˜Kšœœ˜Kšœ3˜3Kšœ˜——™šž œ˜Kšœœ ˜#Kšœ>˜>K˜K˜—šžœ˜Kšœ(˜(Kšœ'˜'Kšœ/˜/Kšœ˜——™ šžœ˜#Kšœœ ˜/Kšœ˜šœœ˜Jšœ˜šœœœ˜&šœœ˜Jšœ˜Jšœ˜J˜—šœ œ˜Jšœ˜Jšœ˜J˜—šœ œ˜$Jšœ˜Jšœ˜J˜—Jšœœ˜——Kšœ!˜!K˜K˜—šžœ˜!Kšœœ˜Kšœ œ˜šœœœ ˜!Jšœ œ˜Jšœ˜Jšœ˜Jšœœ)˜:Jšœœ˜—Kšœ;˜;Kšœ˜——™šžœ˜"J˜Jšœœ˜šž œ˜%Jšœœœœ˜J˜$J˜—Jšœ'œœ˜4Jšœœœœ˜J˜Kšœ˜K˜K˜—šž œ˜ Kšœ@˜@KšœA˜AKšœ˜——™šž œ˜Kšœœ ˜&K˜K˜Kš œœœœœ˜BK˜K˜—šžœ˜Kšœœ˜Kšœœ˜Kšœ8˜8Kšœ˜——šœ™šΠbnœ˜Kšœœ ˜$Kšœ˜Kšœ˜Kšœ˜K˜—šŸœ˜Kšœ$˜$Kšœ$˜$Kšœ"˜(Kšœ˜——™šž œ˜Kšœœ ˜&Kšœ˜Kšœ˜Kšœ˜Kš œœœœœ˜BK˜K˜—šžœ˜Jšœ œ˜ J˜%Kšœœ˜KšœH˜HKšœ˜——™šž œ˜ Kšœœ ˜,Kšœ˜Kš œœœœœ˜HK˜K˜—šž œ˜Kšœœ˜Kšœ6˜6Kšœ˜——™šž œ˜Kšœœ ˜*Jšœ˜Jšœ˜šœœœ˜$Kš œœœœ2œ˜^Kšœ˜—Kšœ˜K˜—Kš œœœœœœœ˜FKš œœœœœœ˜Bšž œ˜$Kšœ œœ˜,Kšœ˜K˜K˜—šž œ˜Kšœœœ˜Kšœœœ˜Kšœ œœ˜8šœœœ˜Kšœœ˜)Kš œœœœ!œ˜FKšœ˜—KšœE˜EKšœ˜——™šŸ œ˜Kšœœ ˜*Kšœ˜Kšœ˜Kšœ˜K˜—šŸ œ˜Kšœ$˜$Kšœ$˜$Kšœ%˜+Kšœ˜——™šŸ Οb˜JšΠbk ˜Kš ˜K˜—šŸ ˜Jš‘ ˜Kš ˜——™šŸ  ˜ Jš‘ ˜Kš ˜K˜—šŸ  ˜Jš‘ ˜Kš ˜——™Kšœ=˜=Kšœ4˜4šœF˜FK˜—KšœF˜FKšœH˜HKšœC˜Cšœ7˜7K˜—Kšœ4˜4Kšœ7˜7Kšœ@˜@Kšœ=˜=Kšœ=˜=Kšœ7˜7Kšœ=˜=K˜—Jšœ˜J˜—…—¨y