DIRECTORY Imager USING [Context], JaMIPrivate, JaMImagerContexts; JaMIContextsImpl: MONITOR IMPORTS EXPORTS JaMIPrivate, JaMImagerContexts = BEGIN OPEN JaMIPrivate, JaMImagerContexts; InfoList: TYPE = REF InfoListRec; InfoListRec: TYPE = RECORD [info: Info, rest: InfoList]; list: InfoList; NotFound: PUBLIC SIGNAL = CODE; 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] }; AddContext: PUBLIC ENTRY PROC [frame: Frame, init: PROC RETURNS[Imager.Context], name: ATOM, enabled, initOnErase: BOOLEAN _ TRUE] = { ENABLE UNWIND => NULL; end,new: JaMImagerContexts.DCList _ NIL; found: BOOLEAN _ FALSE; context: Imager.Context _ init[]; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.frame=frame THEN { FOR dl: JaMImagerContexts.DCList _ l.info.dcList, dl.next UNTIL dl=NIL DO IF dl.name=name THEN { dl.init _init; dl.dc _ context; dl.enabled _ enabled; dl.initOnErase _ initOnErase; found _ TRUE; }; end _ dl; ENDLOOP; IF ~found THEN new _ NEW[JaMImagerContexts.DCRec _ [next: NIL, init: init, dc: context, enabled: enabled, name: name, initOnErase: initOnErase]]; IF end=NIL THEN l.info.dcList _ new ELSE end.next _ new; RETURN}; ENDLOOP; }; RemoveContext: PUBLIC ENTRY PROC [frame: Frame, name: ATOM] RETURNS [context: Imager.Context _ NIL]= { ENABLE UNWIND => NULL; prev: JaMImagerContexts.DCList _ NIL; found: BOOLEAN _ FALSE; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.frame=frame THEN { IF l.info.dcList=NIL THEN SIGNAL NotFound; FOR dl: JaMImagerContexts.DCList _ l.info.dcList, dl.next UNTIL dl=NIL DO IF dl.name=name THEN { IF prev=NIL THEN l.info.dcList _ dl.next ELSE {prev.next _ dl.next; RETURN[dl.dc]}; }; prev _ dl; ENDLOOP; SIGNAL NotFound; RETURN[NIL]; }; ENDLOOP; }; EnableContext: PUBLIC PROC [frame: Frame, name: ATOM] = { ENABLE UNWIND => NULL; found: BOOLEAN _ FALSE; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.frame=frame THEN { IF l.info.dcList=NIL THEN SIGNAL NotFound; FOR dl: JaMImagerContexts.DCList _ l.info.dcList, dl.next UNTIL dl=NIL DO IF dl.name=name THEN {dl.dc _ dl.init[]; dl.enabled _ TRUE}; ENDLOOP; RETURN}; ENDLOOP; SIGNAL NotFound }; DisableContext: PUBLIC PROC [frame: Frame, name: ATOM] = { ENABLE UNWIND => NULL; found: BOOLEAN _ FALSE; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.frame=frame THEN { IF l.info.dcList=NIL THEN SIGNAL NotFound; FOR dl: JaMImagerContexts.DCList _ l.info.dcList, dl.next UNTIL dl=NIL DO IF dl.name=name THEN dl.enabled _ FALSE; ENDLOOP; RETURN}; ENDLOOP; SIGNAL NotFound }; ForAllDCs: PUBLIC PROC [list: JaMImagerContexts.DCList, proc: JaMImagerContexts.GProc] = { FOR l: JaMImagerContexts.DCList _ list, l.next UNTIL l=NIL DO IF l.enabled THEN proc[l.dc]; ENDLOOP; }; END... äJaMImagerContextsImpl.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, March 22, 1983 4:36 pm Last Edited by: Stone, December 21, 1983 4:36 pm Êÿ˜J˜Jšœ™Jšœ.™.Jšœ1™1Jšœ0™0Jšœ0™0J˜J˜šÏk ˜ Jšœœ ˜J˜ J˜J˜—šœ˜Jšœ˜Jšœ!˜(Jšœœ ˜*J˜—Jšœ œœ ˜!Jšœ œœ˜8J˜J˜Jšœ œœœ˜š Ïn œœœœœ˜EJšœœœ˜Jšœœ ˜J˜šœœœ˜,Jšœœœ˜!Jšœ˜—Jšœœ˜(J˜—šž œœœœ˜0Jšœœœ˜J˜Jšœœœœ˜Jšœœœ˜;J˜ šœ œœ˜1Jšœœœ˜:Jšœ œ˜J˜——š žœœœœœ˜BJšœœœ˜šœœœ˜,Jšœœœ ˜+Jšœ˜—Jšœœ˜J˜—šž œœœœœœœœœ˜†Jšœœœ˜Jšœ$œ˜(Jšœœœ˜J˜!šœœœ˜,šœœ˜šœ7œœ˜Išœœ˜J˜!J˜3Jšœœ˜ J˜—J˜ Jšœ˜—šœœœ˜2JšœœU˜_—Jšœœœœ˜8Jšœ˜—Jšœ˜—J˜J˜—šž œœœœœœœ˜fJšœœœ˜Jšœ!œ˜%Jšœœœ˜šœœœ˜,šœœ˜Jšœœœœ ˜*šœ7œœ˜Išœœ˜Jšœœœ˜(Jšœœ ˜*J˜—J˜ Jšœ˜—Jšœ ˜šœœ˜ J˜——Jšœ˜—J˜J˜—šž œœœœ˜9Jšœœœ˜Jšœœœ˜šœœœ˜,šœœ˜Jšœœœœ ˜*šœ7œœ˜IJšœœ"œ˜