DIRECTORY Atom USING [GetPName], BlackBerry, LoganBerry USING [Entry], LoganBerryBrowser USING [Tool], MessageWindow USING [Append, Blink], Rope USING [Concat, ROPE, Length, Fetch], TiogaAccess USING [TiogaChar, Create, Put, Writer, Looks], TiogaAccessViewers USING [WriteViewer], TypeScript USING [ChangeLooks, PutRope, PutChar], ViewerTools USING [ MakeNewTextViewer], ViewerClasses USING [Viewer, ViewerRec]; BlackBerryImpl: CEDAR PROGRAM IMPORTS MessageWindow, TypeScript, Atom, Rope, ViewerTools, TiogaAccess, TiogaAccessViewers EXPORTS BlackBerry ~ { RopeIntoWriterWithLooks: PROC [writer: TiogaAccess.Writer, rope: Rope.ROPE, looks: TiogaAccess.Looks] RETURNS [] ~ { FOR i: INT IN [0..rope.Length) DO c: TiogaAccess.TiogaChar ~ [ charSet: 0, char: rope.Fetch[i], looks: looks, format: NIL, comment: TRUE, endOfNode: FALSE, deltaLevel: 0, propList: NIL ]; writer.Put[c]; ENDLOOP; }; BlankLooks: TiogaAccess.Looks ¬ ALL[FALSE]; NewLine: TiogaAccess.TiogaChar ~ [ charSet: 0, char: '\n, looks: BlankLooks, format: NIL, comment: FALSE, endOfNode: TRUE, deltaLevel: 0, propList: NIL ]; LookIntoLooks: PROC [look: CHAR] RETURNS [looks: TiogaAccess.Looks] ~ { looks ¬ BlankLooks; IF look = ' THEN RETURN [looks: looks]; looks[look] ¬ TRUE; }; firstTime: BOOL ¬ TRUE; -- is this the first time we are being called? queryName: Rope.ROPE; -- the name of this query count: INT ¬ 0; -- how many entries have we created. outWriter: TiogaAccess.Writer; -- the writer to be used while collecting the data. outViewer: ViewerClasses.Viewer; -- the viewer I'll use for playing. info: ViewerClasses.ViewerRec; -- information used in the viewer. CountLimit: INT ¬ 4; -- Why not 4? SetCountLimit: PUBLIC PROC [limit: INT] ~ { IF limit < 1 THEN limit ¬ LAST[INT]; CountLimit ¬ limit; }; PrintEntry: PUBLIC PROC [entry: LoganBerry.Entry, tool: LoganBerryBrowser.Tool] ~ { PutEntryIntoTypescript: PROC [entry: LoganBerry.Entry, tool: LoganBerryBrowser.Tool] RETURNS [] ~ { FOR e: LoganBerry.Entry ¬ entry, e.rest UNTIL e = NIL DO IF e.first.type#NIL THEN { TypeScript.ChangeLooks[tool.inner, 'b]; -- print atribute type in bold TypeScript.PutRope[tool.inner, Atom.GetPName[e.first.type]]; TypeScript.ChangeLooks[tool.inner, ' ]; -- restore normal looks TypeScript.PutRope[tool.inner, ": "]; }; TypeScript.PutRope[tool.inner, Rope.Concat[e.first.value, "\n"]]; ENDLOOP; TypeScript.PutChar[tool.inner, '\n]; }; IF tool.innerFlavor#$TypeScript THEN { MessageWindow.Append[message: "Wrong flavor of browser's output viewer", clearFirst: TRUE]; MessageWindow.Blink[]; RETURN; }; IF firstTime THEN { outWriter ¬ TiogaAccess.Create[]; count ¬ 0; firstTime ¬ FALSE; }; IF entry#NIL THEN { IF (entry.first.type=NIL) THEN { IF count >= CountLimit THEN{ TiogaAccessViewers.WriteViewer[outWriter, outViewer]; TypeScript.PutRope[tool.inner, " completed\n"]; }; firstTime ¬ TRUE; count ¬ 0; TypeScript.PutRope[tool.inner, Rope.Concat[entry.first.value, "\n"]]; RETURN }; IF (entry.first.type=$ERROR) THEN { PutEntryIntoTypescript[entry, tool]; RETURN } }; count ¬ count + 1; SELECT count FROM < CountLimit => PutEntryIntoTypescript[entry, tool]; = CountLimit => { queryName ¬ "LB Query"; info.name ¬ queryName; outViewer ¬ ViewerTools.MakeNewTextViewer[info: info, paint: TRUE]; TypeScript.PutRope[tool.inner, "\nDiverting Output to Viewer "]; TypeScript.PutRope[tool.inner, queryName]; TypeScript.PutChar[tool.inner, ' ]; THROUGH [0..CountLimit) DO TypeScript.PutChar[tool.inner, '.]; ENDLOOP; }; > CountLimit => { TypeScript.PutChar[tool.inner, '.]; }; ENDCASE; FOR e: LoganBerry.Entry ¬ entry, e.rest UNTIL e = NIL DO IF e.first.type#NIL THEN { RopeIntoWriterWithLooks[outWriter, Atom.GetPName[e.first.type], LookIntoLooks['b]]; RopeIntoWriterWithLooks[outWriter, ": ", BlankLooks]; }; RopeIntoWriterWithLooks[outWriter, e.first.value, BlankLooks]; outWriter.Put[NewLine]; ENDLOOP; outWriter.Put[NewLine]; }; }. | BlackBerryImpl.mesa Copyright Σ 1988, 1992 by Xerox Corporation. All rights reserved. created by Eduardo Pelegri-Llopart January 7, 1988 8:56:07 am PST Doug Terry, July 27, 1990 7:01 am PDT Willie-s, April 27, 1992 11:36 am PDT Place each of the characters of the rope into the writer Use a writer to put the info. Eventually we will write it into a file or a viewer. Κ$–(cedarcode) style•NewlineDelimiter ™šœ™Icodešœ Οeœ7™BK™AK™%K™%K™—šΟk ˜ Kšœžœ ˜K˜ Kšœ žœ ˜Kšœžœ˜Kšœžœ˜$Kšœžœ žœ˜*Kšœ žœ)˜:Kšœžœ˜'Kšœ žœ!˜1Kšœ žœ˜'Kšœžœ˜)—K˜šΟnœžœžœ˜šž˜K˜T—Kšžœ ˜Kšœ˜K˜šœžœIžœ˜tK™8K™šžœž˜!˜K˜ K˜K˜ K˜ K˜K˜K˜K˜ K˜K˜—K˜Kšžœ˜—K˜—K˜KšŸ œžœžœ˜+K˜šŸœ˜"K˜ K˜ KšœΟb œ˜K˜ K˜K˜K˜K˜ K˜K˜—šŸ œžœžœžœ˜GKšœ  œ˜Kšžœ žœžœ˜(Kšœžœ˜K˜—K˜Kšœ žœžœΟc.˜FKšœžœ‘˜/Kšœžœ‘$˜4Kšœ‘3˜RKšœ!‘#˜DKšœ‘"˜AK˜KšŸ œžœ‘ ˜"K˜šŸ œžœžœ žœ˜+Kšžœ žœ žœžœ˜$K˜K˜K˜—šŸ œž œ<˜SKšœS™SšŸœžœ9žœ˜cšžœ%žœžœž˜8šžœžœžœ˜Kšœ)‘˜GKšœ<˜Kšœ œ˜Kšžœ˜—Kšœ œ˜K˜—K˜K˜——…—Bβ