<> <> <> <<>> <> <<>> DIRECTORY IO USING [STREAM], LoganBerry USING [Attribute, Entry, EntryProc, OpenDB], Rope USING [ROPE]; LoganBerryCommands: CEDAR DEFINITIONS ~ BEGIN <: In this case, since a pattern is not explicitly specified, the value is taken to be the exact value of the attribute. That is, a missing pattern defaults to "exact". The attribute value may be either a token or a rope literal. An explicit pattern type may be given in parenthesis immediately following the attribute type. Thus, an attribute pattern is given in the form (): Several of these may be concatenated together to get a list of attribute patterns. For example, Name: "Douglas B. Terry" Phone(prefix): 494-44 Office(wildcard): 35-2*>> AttributePattern: TYPE = REF AttributePatternRec; AttributePatternRec: TYPE = RECORD [ attr: LoganBerry.Attribute, ptype: Rope.ROPE _ NIL ]; AttributePatterns: TYPE = LIST OF AttributePattern; SyntaxError: ERROR [explanation: Rope.ROPE _ NIL]; <<>> ReadAttributePatterns: PROC [s: IO.STREAM] RETURNS [ap: AttributePatterns]; <> <<>> WriteAttributePatterns: PROC [s: IO.STREAM, ap: AttributePatterns] RETURNS []; <> <<>> PatternsToEntry: PROC [ap: AttributePatterns] RETURNS [entry: LoganBerry.Entry]; <> <<>> EntryToPatterns: PROC [entry: LoganBerry.Entry] RETURNS [ap: AttributePatterns]; <> <<>> FilteredQuery: PROC [db: LoganBerry.OpenDB, patterns: AttributePatterns, proc: LoganBerry.EntryProc] RETURNS []; <> <<>> END. <> <> <<>>