<> <> <> <> DIRECTORY BasicTime USING[GMT], Camelot USING[segmentIdT], YggDIDPrivate USING[DIDRep], YggInternal USING[Document, FileHandle], YggEnvironment USING [DID, nullDID], YggRep USING[nullTimeStamp, TimeStamp], Rope USING [ROPE]; YggDIDMapPrivate: CEDAR DEFINITIONS = BEGIN <> Document: TYPE = YggInternal.Document; DocumentRep: TYPE = MONITORED RECORD[ did: YggEnvironment.DID, -- id of this document <> fromDID: YggEnvironment.DID _ YggEnvironment.nullDID, toDID: YggEnvironment.DID _ YggEnvironment.nullDID, linkType: Rope.ROPE _ NIL, name: Rope.ROPE, -- human-legible name. parsedDocList: LIST OF DocItem _ NIL, modifiedDIDMap: BOOL _ FALSE, timeStampForIndexMaint: YggRep.TimeStamp _ YggRep.nullTimeStamp, componentFiles: LIST OF YggInternal.FileHandle, interlock: BOOLEAN _ FALSE, next: Document]; <> notCompressed: CARD = 0; EntryPtr: TYPE = LONG BASE POINTER TO Entry; DocPartPtr: TYPE = LONG BASE POINTER TO DocPart; TextRP: TYPE = DocPartPtr RELATIVE POINTER TO TextRep; TextRep: TYPE = MACHINE DEPENDENT RECORD [PACKED SEQUENCE length: CARDINAL OF CHAR]; PartType: TYPE = MACHINE DEPENDENT {root(0), contents(1), outlinks(2), attributes(3), index(4)}; <> DocPart: TYPE = MACHINE DEPENDENT RECORD [ docPartSize(0): CARD, -- size in words of part compression(1): CARD _ notCompressed, keepingModifications(2:0..0): BOOL, partType(2:1..4): PartType, extraFlags(2:5..31): CARD [0..0FFFFFFh] _ 0, slotNo(3): CARD _ 0, indexName(4): TextRP _ NIL, versionIdentifierString(5): TextRP _ NIL, segments(6): CARD ]; SegmentRep: TYPE = MACHINE DEPENDENT RECORD [ firstPage(0): CARD, numberOfBytes(1): CARD, modificationDeltasOffset(2): CARD, lastUsedTime(3): BasicTime.GMT, backUpTime(4): BasicTime.GMT, backUpID(5): CARD, length(6): CARDINAL, runs(7): SEQUENCE COMPUTED CARDINAL OF RunRep ]; RunRep: TYPE = MACHINE DEPENDENT RECORD [ segmentId: Camelot.segmentIdT, segmentPage: CARD, -- offset in segment in pages pages: INT -- for non-leader, number of pages (0 for leader) ]; <> <<>> DocItem: TYPE = RECORD [ partType: PartType, indexName: ATOM _ NIL, slotNo: CARD _ 0, segments: LIST OF SegmentItem ]; SegmentItem: TYPE = RECORD [ firstPage: CARD, numberOfBytes: CARD, runs: LIST OF RunItem ]; RunItem: TYPE = RECORD [ segmentId: Camelot.segmentIdT, segmentPage: CARD, -- offset in segment in pages pages: INT -- for non-leader, number of pages (0 for leader) ]; OverheadPerEntry: CARD = 3; <> <> <> Entry: TYPE = MACHINE DEPENDENT RECORD [ size(0:0..15): CARD16, -- size in words of entire (physical) entry link(0:16..16): BOOL , -- does a link follow? extensionCount(0:17..31): [0..07fffh] , -- 0 for normal, 1 for normal with extentions, and 2 and up for extended entries did(1): YggDIDPrivate.DIDRep, -- the bits for a DID data(OverheadPerEntry): SEQUENCE COMPUTED CARD OF CARD -- see above ]; END. <<>>