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