-- 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...