DIRECTORY FileOps, TextLooks, TextNode, Rope; PGSupport: CEDAR DEFINITIONS = BEGIN OPEN nodeI:TextNode, fOpsI:FileOps, looksI:TextLooks; PGF: TYPE = REF PGFBody; PGFBody: TYPE = RECORD [ propNext: NAT _ 0, -- next available PropIndex propTable: ARRAY fOpsI.PropIndex OF ATOM, propHashKeys: ARRAY PropHashIndex OF PropHashKey, propHashVals: ARRAY PropHashIndex OF PropHashVal, typeNext: NAT _ 0, -- next available TypeIndex typeTable: ARRAY fOpsI.TypeIndex OF nodeI.TypeName, typeHashKeys: ARRAY TypeHashIndex OF TypeHashKey, typeHashVals: ARRAY TypeHashIndex OF TypeHashVal, looksNext: NAT _ 0, -- next available LooksIndex, looksTable: ARRAY fOpsI.LooksIndex OF looksI.Looks, looksHashKeys: ARRAY LooksHashIndex OF LooksHashKey, looksHashVals: ARRAY LooksHashIndex OF LooksHashVal ]; TypeHashIndex: TYPE = [0 .. typeHashSize); typeHashSize: PRIVATE NAT = IF fOpsI.numTypes > 85 THEN 256 ELSE 128; -- Should be power of 2 TypeHashKey: PRIVATE TYPE = RECORD [typename: nodeI.TypeName _ nodeI.nullTypeName]; TypeHashVal: PRIVATE TYPE = RECORD [index: fOpsI.TypeIndex]; LooksHashIndex: TYPE = [0 .. looksHashSize); looksHashSize: PRIVATE NAT = IF fOpsI.numLooks > 85 THEN 256 ELSE 128; -- Should be power of 2 LooksHashKey: PRIVATE TYPE = RECORD [looks: looksI.Looks _ looksI.noLooks]; LooksHashVal: PRIVATE TYPE = RECORD [index: fOpsI.LooksIndex]; PropHashIndex: TYPE = [0 .. propHashSize); propHashSize: PRIVATE NAT = IF fOpsI.numProps > 85 THEN 256 ELSE 128; -- Should be power of 2 PropHashKey: PRIVATE TYPE = RECORD [propname: ATOM _ NIL]; PropHashVal: PRIVATE TYPE = RECORD [index: fOpsI.PropIndex]; CreatePGF: PROC RETURNS [PGF]; FreePGF: PROC [PGF]; -- don't return it more than once! RetrieveTypeName: PROC [index: fOpsI.TypeIndex, pgf: PGF] RETURNS [typename: nodeI.TypeName] = INLINE { IF index >= pgf.typeNext THEN ERROR; RETURN [pgf.typeTable[index]] }; EnterTypeName: PROC [typename: nodeI.TypeName, pgf: PGF] RETURNS [ok: BOOLEAN, index: fOpsI.TypeIndex]; RetrieveLooks: PROC [index: fOpsI.LooksIndex, pgf: PGF] RETURNS [looks: looksI.Looks] = INLINE { IF index >= pgf.looksNext THEN ERROR; RETURN [pgf.looksTable[index]] }; EnterLooks: PROC [looks: looksI.Looks, pgf: PGF] RETURNS [ok: BOOLEAN, index: fOpsI.LooksIndex]; RetrieveProp: PROC [index: fOpsI.PropIndex, pgf: PGF] RETURNS [propname: ATOM] = INLINE { IF index >= pgf.propNext THEN ERROR; RETURN [pgf.propTable[index]] }; EnterProp: PROC [propname: ATOM, pgf: PGF] RETURNS [ok: BOOLEAN, index: fOpsI.PropIndex]; Start: PROC; -- for initialization only END. Ÿ-- PGSupport.Mesa -- written by Paxton. January 1981 -- last written by Paxton. 22-May-81 10:04:43 -- PGF is the file-level symbol table structure for put/get -- ***** Initialization ÊјJšÏc™Jš#™#Jš-™-J˜JšÏk ˜ J˜J˜ J˜ J˜J˜Jšœ žœ˜J˜Jšžœžœ1˜;J˜šžœžœžœ ˜Jš;™;—šœ žœžœ˜Jšœ žœ˜.Jšœ žœžœžœ˜)Jšœžœžœ ˜1Jšœžœžœ ˜1Jšœ žœ˜.Jšœ žœžœ˜3Jšœžœžœ ˜1Jšœžœžœ ˜1Jšœ žœ˜1Jšœ žœžœ˜3Jšœžœžœ˜4Jšœžœžœ ˜3J˜J˜—Jšœžœ˜*šœžœžœ˜Jšžœžœžœ˜A—Jšœ žœžœžœ1˜SJšœ žœžœžœ˜J˜Jšœžœ˜*šœžœžœ˜Jšžœžœžœ˜A—Jš œ žœžœžœ žœžœ˜:Jšœ žœžœžœ˜