DIRECTORY Imager USING [Context], JaMIPrivate, JaMImagerContexts; JaMIContextsImpl: CEDAR MONITOR IMPORTS EXPORTS JaMIPrivate, JaMImagerContexts = BEGIN OPEN JaMImagerContexts; InfoList: TYPE = REF InfoListRec; InfoListRec: TYPE = RECORD [info: Info, rest: InfoList]; list: InfoList; State: TYPE = JaMIPrivate.State; Info: TYPE = JaMIPrivate.Info; NotFound: PUBLIC SIGNAL = CODE; CreateInfo: PUBLIC ENTRY PROC [state: State] RETURNS [info: Info] = { ENABLE UNWIND => NULL; info _ NEW[JaMIPrivate.InfoRec]; info.state _ state; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.state=state THEN ERROR; ENDLOOP; list _ NEW[InfoListRec _ [info,list]] }; ForgetInfo: PUBLIC ENTRY PROC [state: State] = { ENABLE UNWIND => NULL; pred: InfoList; IF list=NIL THEN RETURN; IF list.info.state=state THEN { list _ list.rest; RETURN }; pred _ list; FOR l:InfoList _ list.rest, l.rest UNTIL l=NIL DO IF l.info.state=state THEN { pred.rest _ l.rest; RETURN }; pred _ l; ENDLOOP }; GetInfo: PUBLIC ENTRY PROC [state: State] RETURNS [info: Info] = { ENABLE UNWIND => NULL; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.state=state THEN RETURN [l.info]; ENDLOOP; RETURN [NIL] }; AddContext: PUBLIC ENTRY PROC [state: State, context: Context, callMe: CallMe, name: ATOM, enabled: BOOLEAN _ TRUE] = { ENABLE UNWIND => NULL; end,new: JaMImagerContexts.DCList _ NIL; found: BOOLEAN _ FALSE; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.state=state THEN { FOR dl: JaMImagerContexts.DCList _ l.info.dcList, dl.next UNTIL dl=NIL DO IF dl.name=name THEN { dl.callMe _callMe; dl.dc _ context; dl.enabled _ enabled; found _ TRUE; }; end _ dl; ENDLOOP; IF ~found THEN new _ NEW[JaMImagerContexts.DCRec _ [next: NIL, callMe: callMe, dc: context, enabled: enabled, name: name]]; IF end=NIL THEN l.info.dcList _ new ELSE end.next _ new; RETURN}; ENDLOOP; }; RemoveContext: PUBLIC ENTRY PROC [state: State, name: ATOM] RETURNS [context: Imager.Context]= { ENABLE UNWIND => NULL; prev: JaMImagerContexts.DCList _ NIL; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.state=state THEN 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; ENDLOOP; SIGNAL NotFound; RETURN[NIL]; }; EnableContext: PUBLIC PROC [state: State, name: ATOM] = { ENABLE UNWIND => NULL; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.state=state THEN FOR dl: JaMImagerContexts.DCList _ l.info.dcList, dl.next UNTIL dl=NIL DO IF dl.name=name THEN {dl.enabled _ TRUE; RETURN}; ENDLOOP; ENDLOOP; SIGNAL NotFound; }; DisableContext: PUBLIC PROC [state: State, name: ATOM] = { ENABLE UNWIND => NULL; FOR l:InfoList _ list, l.rest UNTIL l=NIL DO IF l.info.state=state THEN FOR dl: JaMImagerContexts.DCList _ l.info.dcList, dl.next UNTIL dl=NIL DO IF dl.name=name THEN {dl.enabled _ FALSE; RETURN}; ENDLOOP; 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, January 30, 1984 1:26:03 pm PST Ê”˜J˜Jšœ™Jšœ.™.Jšœ1™1Jšœ0™0Jšœ6™6J˜J˜šÏk ˜ Jšœœ ˜J˜ J˜J˜—šœ ˜Jšœ˜Jšœ!˜(Jšœœ˜J˜—Jšœ œœ ˜!Jšœ œœ˜8J˜Jšœœ˜ Jšœœ˜J˜Jšœ œœœ˜š Ïn œœœœœ˜EJšœœœ˜Jšœœ˜ J˜šœœœ˜,Jšœœœ˜!Jšœ˜—Jšœœ˜(J˜—šž œœœœ˜0Jšœœœ˜J˜Jšœœœœ˜Jšœœœ˜;J˜ šœ œœ˜1Jšœœœ˜:Jšœ œ˜J˜——š žœœœœœ˜BJšœœœ˜šœœœ˜,Jšœœœ ˜+Jšœ˜—Jšœœ˜J˜—šž œœœœ8œ œœ˜wJšœœœ˜Jšœ$œ˜(Jšœœœ˜šœœœ˜,šœœ˜šœ7œœ˜Išœœ˜Jšœ%˜%J˜Jšœœ˜ J˜—J˜ Jšœ˜—šœœœ˜2Jšœœ?˜I—Jšœœœœ˜8Jšœ˜—Jšœ˜—J˜J˜—š ž œœœœœœ˜`Jšœœœ˜Jšœ!œ˜%šœœœ˜,šœœ˜šœ7œœ˜Išœœ˜Jšœœœ˜(Jšœ˜Jšœ˜J˜—J˜ Jšœ˜——Jšœ˜—Jšœ ˜Jšœœ˜ J˜J˜—šž œœœœ˜9Jšœœœ˜šœœœ˜,šœœ˜šœ7œœ˜IJšœœœœ˜1Jšœ˜——Jšœ˜—Jšœ ˜J˜J˜—šžœœœœ˜:Jšœœœ˜šœœœ˜,šœœ˜šœ7œœ˜IJšœœœœ˜2Jšœ˜——Jšœ˜—Jšœ ˜J˜J˜—šž œœœD˜Zšœ,œœ˜=Jšœ œ ˜Jšœ˜J˜J˜J˜J˜——Jšœ˜J˜J˜J˜—…— rð