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. Nedited by Teitelman January 14, 1983 6:53 pm when Bill fixes it so that he always calls ViewerAbort.SetUserAbort, then the next check would be unnecessary when the viewer is in fact a typescript. However, as things stand now, the "abort" bit gets set one way if selection at end of typescript, a different way if in middle. Κ– "Cedar" style˜J˜JšΟcœ™/šΟk ˜ Jšœžœ"˜,Jšœ žœ:˜JJšœ žœ˜Jšœžœ ˜˜J˜——J˜JšΡblnœž œ˜J˜Jšžœžœ ˜J˜Jšžœ˜J˜Jšœžœ˜ J˜JšΟnœžœ˜$J˜š   œžœž œžœžœ˜?Jšœžœžœ˜ Jš žœ"žœžœžœžœ˜WJ™–Jšžœ6žœžœžœžœžœžœ˜eJšžœžœ˜J˜—J˜š  œžœ˜3Jšœžœžœ˜ Jšžœ"žœ#žœ˜Sšžœ6žœž˜@Jšœžœžœžœž˜"—JšžœNžœžœžœ˜dJšœ˜—J˜š œžœ˜6Jšœžœžœ˜ Jšžœ"žœ#˜Kšžœ6žœž˜@Jš œžœžœžœžœ˜$—J˜—J˜J˜Jšžœ˜J˜J˜—…—Ζ.