DIRECTORY MessageWindow USING [Append, Blink], Rope USING [ROPE], RuntimeError USING [UNCAUGHT], TiogaAccess USING [CopyNode, Create, DoneWith, EndOf, FromFile, FromSelection, Get, PeekRope, Put, Reader, TiogaChar, WriteFile, Writer, WriteSelection], TiogaOps USING [CallWithLocks, Ref]; TiogaAccessExample: CEDAR PROGRAM IMPORTS MessageWindow, RuntimeError, TiogaAccess, TiogaOps ~ BEGIN ROPE: TYPE ~ Rope.ROPE; SaveSelection: PROC [fileName: ROPE] ~ { out: TiogaAccess.Writer _ TiogaAccess.Create[]; in: TiogaAccess.Reader _ TiogaAccess.FromSelection[]; UNTIL TiogaAccess.EndOf[in] DO DO tiogaChar: TiogaAccess.TiogaChar _ TiogaAccess.Get[in]; TiogaAccess.Put[out, tiogaChar]; IF tiogaChar.endOfNode THEN EXIT; ENDLOOP; ENDLOOP; TiogaAccess.DoneWith[in]; TiogaAccess.WriteFile[out, fileName]; }; GetSelection: PROC ~ { out: TiogaAccess.Writer _ TiogaAccess.Create[]; selection: TiogaAccess.Reader _ TiogaAccess.FromSelection[]; fileName: ROPE _ TiogaAccess.PeekRope[selection]; in: TiogaAccess.Reader _ TiogaAccess.FromFile[fileName]; TiogaAccess.DoneWith[selection]; IF NOT TiogaAccess.EndOf[in] THEN [] _ TiogaAccess.Get[in]; UNTIL TiogaAccess.EndOf[in] DO [] _ TiogaAccess.CopyNode[out, in] ENDLOOP; TiogaAccess.DoneWith[in]; TiogaAccess.WriteSelection[out]; }; ReverseSelection: PROC ~ { buffer: LIST OF TiogaAccess.TiogaChar; out: TiogaAccess.Writer _ TiogaAccess.Create[]; in: TiogaAccess.Reader _ TiogaAccess.FromSelection[]; UNTIL TiogaAccess.EndOf[in] DO tiogaChar: TiogaAccess.TiogaChar; DO tiogaChar _ TiogaAccess.Get[in]; IF tiogaChar.endOfNode THEN EXIT; buffer _ CONS[tiogaChar, buffer]; ENDLOOP; UNTIL buffer = NIL DO t: LIST OF TiogaAccess.TiogaChar _ buffer; buffer _ t.rest; t.rest _ NIL; TiogaAccess.Put[out, t.first]; ENDLOOP; TiogaAccess.Put[out, tiogaChar]; ENDLOOP; TiogaAccess.DoneWith[in]; TiogaAccess.WriteSelection[out]; }; LockedReverseSelection: PROC ~ { action: PROC [ref: TiogaOps.Ref] ~ {ReverseSelection[]}; TiogaOps.CallWithLocks[action ! RuntimeError.UNCAUGHT => { MessageWindow.Append["Unknown error in ReverseSelection", TRUE]; MessageWindow.Blink[]; CONTINUE }]; }; END. CreateButton S _ TiogaAccessExample.SaveSelection["Save"] CreateButton G _ TiogaAccessExample.GetSelection[] CreateButton R _ TiogaAccessExample.ReverseSelection[] CreateButton L _ TiogaAccessExample.LockedReverseSelection[] CreateButton P _ TiogaAccess.GetPosition[TiogaAccess.FromSelection[]] CreateButton s _ &s _ TiogaAccess.FromSelection[] CreateButton t _ TiogaAccess.WriteSelection[&w] _ &w _ TiogaAccess.Create[] _ TiogaAccess.Put[&w, [charSet: 0, char: 'n, looks: ALL[FALSE], format: $default, comment: FALSE, endOfNode: FALSE, deltaLevel: 0, propList: NIL]] _ TiogaAccess.Put[&w, [charSet: 0, char: '\n, looks: ALL[FALSE], format: $default, comment: FALSE, endOfNode: TRUE, deltaLevel: 0, propList: NIL]] _ &w _ TiogaAccess.WriteFile[&w, "Save"] TiogaAccessExample.mesa Copyright (C) 1984, Xerox Corporation. All rights reserved. Michael Plass, March 25, 1985 5:10:28 pm PST Could catch FS.Error here for bad name or missing file. Discard root; failure to do this will cause the WriteSelection to fail. ΚE˜J™J™<™,J˜—šΟk ˜ Jšœœ˜$Jšœœœ˜Jšœ œœ˜Jšœ œˆ˜™šœ œ˜$J˜——šœ ˜!Jšœ3˜:Jšœ˜J˜šœœœ˜J˜—šΟn œœ œ˜(Jšœ/˜/Jšœ5˜5šœ˜š˜Jšœ7˜7Jšœ ˜ Jšœœœ˜!Jšœ˜—Jšœ˜—Jšœ˜Jšœ%˜%Jšœ˜J˜—šž œœ˜Jšœ/˜/Jšœ<˜