<> <> <> <<>> <> <<>> DIRECTORY IO USING [STREAM], LoganBerryStub USING [Attribute, Entry, EntryProc, OpenDB], Rope USING [ROPE], ViewerClasses USING [Viewer]; LoganBerryBrowser: 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: LoganBerryStub.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: LoganBerryStub.Entry]; <> <<>> EntryToPatterns: PROC [entry: LoganBerryStub.Entry] RETURNS [ap: AttributePatterns]; <> <<>> FilteredQuery: PROC [db: LoganBerryStub.OpenDB, patterns: AttributePatterns, proc: LoganBerryStub.EntryProc] RETURNS []; <> <<>> <> DisplayProc: TYPE = PROC [entry: LoganBerryStub.Entry, output: ViewerClasses.Viewer, clientData: REF _ NIL] RETURNS [continue: BOOL _ TRUE]; <> PrintEntry: DisplayProc; <> OpProc: TYPE = PROC [op: ATOM, complete: BOOLEAN, output: ViewerClasses.Viewer, clientData: REF _ NIL] RETURNS [continue: BOOL _ TRUE]; <> <> CreateTool: PROC [db: LoganBerryStub.OpenDB, proc: DisplayProc _ PrintEntry, oproc: OpProc _ NIL, clientData: REF _ NIL] RETURNS []; <> <<>> END. <> <> <> <> <> <> <> <> <<>>