DIRECTORY Idle USING [IdleHandler, RegisterIdleHandler, UnregisterIdleHandler], IO USING [Close, EndOfStream, GetTokenRope, IDProc, RIS, STREAM], Rope USING [Cat, Index, ROPE, Substr], TapeToolInternal USING [ExecuteOp, Parameters, TapeTool, ToolParameters], UserCredentials USING [Get], UserProfile USING [Boolean, ListOfTokens, Number, ProfileChangedProc, Token], VFonts USING [EstablishFont, Font, FontHeight], ViewerClasses USING [Viewer], ViewerTools USING [GetContents, SetContents]; TapeToolUtilitiesImpl: CEDAR MONITOR IMPORTS Idle, IO, Rope, TapeToolInternal, UserCredentials, UserProfile, VFonts, ViewerTools EXPORTS TapeToolInternal = BEGIN OPEN Tool: TapeToolInternal; ROPE: TYPE = Rope.ROPE; STREAM: TYPE ~ IO.STREAM; ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- parameters: Tool.Parameters _ NIL; atIdle: BOOL _ FALSE; profileTool: Tool.TapeTool _ NIL; curUser: ROPE _ NIL; ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ViewerToRopeList: PUBLIC PROC [viewer: ViewerClasses.Viewer] RETURNS [list: LIST OF ROPE _ NIL] = BEGIN tail: LIST OF ROPE _ NIL; s: IO.STREAM = IO.RIS[ViewerTools.GetContents[viewer]]; DO r: ROPE _ s.GetTokenRope[IO.IDProc ! IO.EndOfStream => EXIT].token; rL: LIST OF ROPE; rL _ CONS[r, NIL]; IF list = NIL THEN list _ rL ELSE tail.rest _ rL; tail _ rL; ENDLOOP; s.Close[]; END; GetToolParameters: PUBLIC PROC RETURNS [Tool.Parameters] = {RETURN[parameters]}; ResetNewParameters: PUBLIC ENTRY PROC = BEGIN parameters.new _ FALSE; END; ReactToProfile: PUBLIC ENTRY UserProfile.ProfileChangedProc = BEGIN ENABLE UNWIND => NULL; params: Tool.Parameters _ NEW[Tool.ToolParameters]; fontFamily: ROPE = UserProfile.Token["TapeTool.FontFamily", "Tioga"]; fontSize: NAT = UserProfile.Number["TapeTool.FontSize", 10]; userName: ROPE _ UserCredentials.Get[].name; host: ROPE _ UserProfile.Token["TapeTool.Host", "Ivy"]; userName _ userName.Substr[len: userName.Index[s2: "."]]; params.fileNamePrefixes _ UserProfile.ListOfTokens[ key: "TapeTool.FileNamePrefixes", default: LIST[Rope.Cat["[", host, "]<", userName, ">"], NIL] ]; params.font _ VFonts.EstablishFont[fontFamily, fontSize]; params.fixedFont _ VFonts.EstablishFont[family: "Gacha", size: fontSize - 2]; params.entryHeight _ VFonts.FontHeight[params.font] + 2; params.entryVSpace _ VFonts.FontHeight[params.font]*1/6; params.entryHSpace _ 10; params.localDisk _ UserProfile.Boolean["TapeTool.Local", FALSE]; params.defaultServer _ UserProfile.Token["TapeTool.Server", "Maggie"]; params.new _ TRUE; parameters _ params; IF profileTool # NIL THEN BEGIN ViewerTools.SetContents[profileTool.fileNameViewer, (IF params.fileNamePrefixes = NIL THEN NIL ELSE params.fileNamePrefixes.first)]; END; END; RegisterProfile: PUBLIC ENTRY PROC [tool: Tool.TapeTool] = BEGIN profileTool _ tool; END; UnregisterProfile: PUBLIC ENTRY PROC [tool: Tool.TapeTool] = BEGIN profileTool _ NIL; END; RegisterIdle: PUBLIC ENTRY PROC [tool: Tool.TapeTool] = BEGIN tool.idleEvent _ Idle.RegisterIdleHandler[RegisterProc, tool]; END; UnRegisterIdle: PUBLIC ENTRY PROC [tool: Tool.TapeTool] = BEGIN IF tool.idleEvent = NIL THEN RETURN []; Idle.UnregisterIdleHandler[tool.idleEvent]; END; IdleCheck: PUBLIC ENTRY PROC [tool: Tool.TapeTool] RETURNS [idle: BOOL] = BEGIN RETURN [atIdle]; END; RegisterProc: Idle.IdleHandler = BEGIN tool: Tool.TapeTool _ NARROW[data]; atIdle _ IF reason = becomingIdle THEN TRUE ELSE FALSE; IF atIdle AND tool.open AND NOT tool.active THEN Tool.ExecuteOp[tool: tool, op: [op: Close]]; END; ReactToProfile[edit]; END. h-- TapeToolUtilitiesImpl.mesa Copyright c 1984, 1985 Xerox Corporation. All rights reserved. Last Edited by: McCreight, February 26, 1985 3:40:46 pm PST Tim Diebert May 13, 1985 4:37:49 pm PDT Global Variables (protected by monitor) Utilities (exports to TapeToolInternal for individual ops) IdleHandler: TYPE = PROC [data: REF, reason: IdleReason]; ΚŸ˜šœ™Jšœ Οmœ4™?J™;Icode™'—J™J˜šΟk ˜ Jšœžœ;˜EJšžœžœ,žœžœ˜AJšœžœ žœ˜&Jšœžœ3˜IJšœžœ˜Jšœ žœ<˜MJšœžœ#˜/Jšœžœ ˜Jšœ žœ˜-—J˜šΟbœžœž˜$JšžœT˜[Jšžœ˜—J˜Jšž˜J˜Jšžœ˜J˜Jšžœžœžœ˜šžœžœžœžœ˜J˜—J˜JšΟcœ œ œ œ œ œ œ ˜'J™'Jš œ œ œ œ œ œ œ ˜'J˜Jšœžœ˜"Jšœžœžœ˜Jšœžœ˜!Jšœ žœžœ˜J˜Jš œ œ œ œ œ œ œ ˜'J™:Jš œ œ œ œ œ œ œ ˜'J˜šΟnœžœžœ˜˜>Jšžœ˜—J˜š‘œžœž˜?Jšžœžœžœžœ˜'Jšœ+˜+Jšžœ˜—J˜š ‘ œžœžœžœžœžœž˜OJšžœ ˜Jšžœ˜—J˜šœ!ž˜&Kš‘ œžœžœžœ™9Kšœžœ˜#Kš œ žœžœžœžœžœ˜7Kš žœžœ žœžœ žœ-˜]Kšžœ˜J˜—J˜Jšœ˜J˜Jšžœ˜J˜J˜J™J˜—…—