-- TJaMGraphicsPrivateImpl.mesa -- Last change by Bill Paxton, 2-Feb-82 12:50:27 -- Last changed by Rick Beach, July 1, 1982 11:29 am -- Last changed by Ken Pier, June 29, 1982 3:57 pm DIRECTORY Graphics, TJaMGraphicsPrivate; TJaMGraphicsPrivateImpl: MONITOR IMPORTS EXPORTS TJaMGraphicsPrivate = BEGIN OPEN TJaMGraphicsPrivate; InfoList: TYPE = REF InfoListRec; InfoListRec: TYPE = RECORD [info: Info, rest: InfoList]; list: InfoList; CreateInfo: PUBLIC ENTRY PROC [frame: Frame] RETURNS [info: Info] = { ENABLE UNWIND => NULL; info ← NEW[InfoRec]; info.frame ← frame; FOR l:InfoList ← list, l.rest UNTIL l=NIL DO IF l.info.frame=frame THEN ERROR; ENDLOOP; list ← NEW[InfoListRec ← [info,list]] }; ForgetInfo: PUBLIC ENTRY PROC [frame: Frame] = { ENABLE UNWIND => NULL; pred: InfoList; IF list=NIL THEN RETURN; IF list.info.frame=frame THEN { list ← list.rest; RETURN }; pred ← list; FOR l:InfoList ← list.rest, l.rest UNTIL l=NIL DO IF l.info.frame=frame THEN { pred.rest ← l.rest; RETURN }; pred ← l; ENDLOOP }; GetInfo: PUBLIC ENTRY PROC [frame: Frame] RETURNS [info: Info] = { ENABLE UNWIND => NULL; FOR l:InfoList ← list, l.rest UNTIL l=NIL DO IF l.info.frame=frame THEN RETURN [l.info]; ENDLOOP; RETURN [NIL] }; EstablishNonViewerContext: PUBLIC ENTRY PROC [frame: Frame, context: Graphics.Context] = { ENABLE UNWIND => NULL; FOR l:InfoList ← list, l.rest UNTIL l=NIL DO IF l.info.frame=frame THEN { l.info.dcList ← NEW[DCListRec ← [initdc: l.info.initdc, dc: l.info.dc, next: l.info.dcList]]; l.info.initdc ← context; l.info.dc ← context; l.info.itsAViewerDC ← FALSE; RETURN}; ENDLOOP; }; ForgetNonViewerContext: PUBLIC ENTRY PROC [frame: Frame] = { ENABLE UNWIND => NULL; FOR l:InfoList ← list, l.rest UNTIL l=NIL DO IF l.info.frame=frame THEN { IF l.info.dcList=NIL THEN ERROR; l.info.initdc ← l.info.dcList.initdc; l.info.dc ← l.info.dcList.dc; l.info.dcList ← l.info.dcList.next; IF l.info.dcList=NIL THEN l.info.itsAViewerDC ← TRUE; RETURN}; ENDLOOP; }; END...