<> DIRECTORY Atom USING [GetPropFromList, PutPropOnList], TypeScript USING [UserAbort, SetUserAbort, ResetUserAbort, IsATypeScript], ViewerAbort USING [], ViewerClasses USING [Viewer] ; ViewerAbortImpl: CEDAR PROGRAM IMPORTS Atom, TypeScript EXPORTS ViewerAbort = BEGIN Viewer: TYPE = ViewerClasses.Viewer; UserAbort: PUBLIC PROCEDURE [viewer: Viewer] RETURNS [BOOL] = { val: REF ANY; IF TypeScript.IsATypeScript[viewer] AND TypeScript.UserAbort[viewer] THEN RETURN[TRUE]; <> IF (val _ Atom.GetPropFromList[viewer.props, $Abort]) # NIL THEN RETURN[(NARROW[val, REF BOOLEAN])^]; RETURN[FALSE]; }; SetUserAbort: PUBLIC PROCEDURE [viewer: Viewer] = { val: REF ANY; IF TypeScript.IsATypeScript[viewer] THEN {TypeScript.SetUserAbort[viewer]; RETURN}; IF (val _ Atom.GetPropFromList[viewer.props, $Abort]) # NIL THEN (NARROW[val, REF BOOLEAN])^ _ TRUE ELSE viewer.props _ Atom.PutPropOnList[propList: viewer.props, prop: $Abort, val: NEW[BOOL _ TRUE]]; }; ResetUserAbort: PUBLIC PROCEDURE [viewer: Viewer] = { val: REF ANY; IF TypeScript.IsATypeScript[viewer] THEN TypeScript.ResetUserAbort[viewer]; IF (val _ Atom.GetPropFromList[viewer.props, $Abort]) # NIL THEN (NARROW[val, REF BOOLEAN])^ _ FALSE; }; END.