DIRECTORY Rope, IO, ViewRec, Process; ViewRecExampleClient: PROGRAM IMPORTS IO, ViewRec, Process = BEGIN Wasnt: ERROR = CODE; ROPE: TYPE = Rope.ROPE; State: TYPE = {x, Y, z}; Foo: TYPE = {xyz, abc, lmn}; FuBar: TYPE = {abc, de, f, g, h, i, j, k, l, m}; Handle: TYPE = REF Rep; Rep: TYPE = RECORD [ state: State _ Y, push: PROC[inst: Instance, number: LONG CARDINAL], pokes: LONG INTEGER _ 1, foo: LONG CARDINAL _ 7, fb: FuBar _ de, char: CHAR _ '\n, bool: BOOLEAN _ FALSE, f: Foo _ abc, oof: RECORD [a: REAL, b: INTEGER] _ [-47, 17701], name: Rope.ROPE _ "fu", SetState: PROC [h: Handle, to: State] RETURNS [was: State], MustBe: PROC [h: Handle, what: State _ z, eq: BOOLEAN], Negate: PROC [h: Handle], SetName: PROC [h: Handle, newName: ROPE], Delay: PROC [milliseconds: CARDINAL] ]; Instance: TYPE = REF InstanceBody; InstanceBody: TYPE = RECORD[stream: IO.Handle]; count: CARDINAL _ 0; SetState: PROC [h: Handle, to: State] RETURNS [was: State] = BEGIN was _ h.state; h.state _ to; h.pokes _ -(h.pokes + (IF h.pokes < 0 THEN -1 ELSE 1)); END; MustBe: PROC [h: Handle, what: State _ z, eq: BOOLEAN] = BEGIN IF (h.state = what) # eq THEN ERROR Wasnt; END; Push: PROC[inst: Instance, number: LONG CARDINAL _ 20] = {inst.stream.PutF["given %g\n", IO.card[number]]}; Negate: PROC [h: Handle] = {h.pokes _ - h.pokes}; SetName: PROC [h: Handle, newName: ROPE] = {Delay[5000]; h.name _ newName}; Delay: PROC [milliseconds: CARDINAL] = {Process.Pause[Process.MsecToTicks[milliseconds]]}; Doit: PROC RETURNS [h: Handle] = BEGIN instance: Instance _ NEW[InstanceBody _ [IO.CreateViewerStreams[IO.PutFR["foo#%g", IO.card[count _ count+1]]].out]]; h _ NEW [Rep _ [ SetState: SetState, push: Push, MustBe: MustBe, Negate: Negate, SetName: SetName, Delay: Delay]]; [] _ ViewRec.ViewRef[rec: h, specs: ViewRec.BindAllOfATypeFromRefs[h, NEW [Instance _ instance]]. BindingListAppend[ViewRec.BindAllOfATypeFromRefs[h, NEW[Handle _ h]]], viewerInit: [iconic: FALSE, name: IO.PutFR["Test#%g", IO.card[count]]], paint: TRUE]; END; END. rFILE ViewRecExampleClient.Mesa last changed by Spreitzer at March 11, 1983 12:31 pm A sample use of ViewRec ÊE˜J˜Jšœ™Jšœ4™4J˜Jšœ™J˜JšÏk œœ˜%J˜šœ˜Jšœœ˜J˜—Jš˜J˜Jšœœœ˜J˜Jšœœœ˜J˜Jšœœœ˜Jšœœ˜Jšœœ%˜0J˜Jšœœœ˜šœœœ˜Jšœœ˜Jšœœœœ˜2Jšœœœ˜Jšœœœ˜J˜Jšœœ˜Jšœœœ˜J˜ Jšœœœœ˜1Jšœ œ˜JšÏnœœœ˜;Jšžœœ"œ˜7Jšžœœ ˜Jšžœœœ˜)Jšžœœœ˜$J˜J˜—Jšœ œœ˜"Jšœœœ œ ˜/J˜Jšœœ˜J˜šžœœœ˜