DIRECTORY CD, CDValue, CDVPrivate, CDVScale, CDColors, UserProfile; CDVInit: CEDAR MONITOR IMPORTS CDValue, CDVPrivate, CDVScale, UserProfile, CDColors EXPORTS CDVPrivate = BEGIN MyGraphicRef: TYPE = CDVPrivate.MyGraphicRef; MyGraphicRec: TYPE = CDVPrivate.MyGraphicRec; notSupportedColorMode: PUBLIC ERROR = CODE; linkBase: PUBLIC MyGraphicRef _ NIL; InitDesignRec: PROC [me: MyGraphicRef] = BEGIN FOR l: MyGraphicRef _ linkBase, l.link WHILE l#NIL DO IF me.actualDesign=l.actualDesign THEN { me.designRec _ l.designRec; RETURN }; ENDLOOP; me.designRec _ NEW[CDVPrivate.PrivatePerDesign]; CDVPrivate.SetCursorMode[me, NIL]; END; NewAndLink: PUBLIC ENTRY PROC [design: CD.Design] RETURNS [MyGraphicRef] = BEGIN ENABLE UNWIND => NULL; scale, grid: INT; me: MyGraphicRef ~ NEW[MyGraphicRec]; me.link _ linkBase; me.actualDesign _ design; InitDesignRec[me]; scale _ CDValue.FetchInt[boundTo: design, key: $CDxInitScale, propagation: global, ifNotFound: 6]; IF NOT scale IN CDVScale.ScaleRange THEN scale _ 6; grid _ CDValue.FetchInt[boundTo: design, key: $CDxInitGrid, propagation: global, ifNotFound: CD.lambda]; grid _ MIN[MAX[grid, 0], 256]; me.scale _ CDVScale.MakeScale[nscale: scale, grid: grid, off: [0,0]]; me.stoprequest _ NEW[BOOLEAN]; linkBase _ me; me.environment _ CDValue.FetchInt[design.technology, $CDxDrawMode, global]#1; me.personalColors _ CDColors.globalColors; RETURN [me] END; UnLink: PUBLIC ENTRY PROC [me: MyGraphicRef] = BEGIN ENABLE UNWIND => NULL; IF linkBase=NIL THEN ERROR; IF me=linkBase THEN {linkBase_linkBase.link; RETURN}; FOR l: MyGraphicRef _ linkBase, l.link WHILE l#NIL DO IF l.link=me THEN {l.link_l.link.link; RETURN} ENDLOOP; ERROR END; IncludeAPainterRec: PUBLIC ENTRY PROC [me: CDVPrivate.MyGraphicRef, pr: REF CDVPrivate.PainterRec] = BEGIN ENABLE UNWIND => NULL; FOR list: CDVPrivate.PainterList _ me.painterList, list.rest WHILE list#NIL DO IF list.first=pr THEN RETURN ENDLOOP; me.painterList _ CONS[pr, me.painterList] END; RemoveAPainterRec: PUBLIC ENTRY PROC [me: CDVPrivate.MyGraphicRef, pr: REF CDVPrivate.PainterRec] = BEGIN ENABLE UNWIND => NULL; IF me.painterList#NIL THEN { IF me.painterList.first=pr THEN me.painterList _ me.painterList.rest ELSE { FOR list: CDVPrivate.PainterList _ me.painterList, list.rest WHILE list.rest#NIL DO IF list.rest.first=pr THEN {list.rest _ list.rest.rest; RETURN} ENDLOOP; } }; END; CatchAny: PROC [b: BOOL] = BEGIN catchAny_b; IF catchAny THEN catchAnyWhichDeadlock_TRUE END; CatchAnyWhichDeadlock: PROC [b: BOOL] = BEGIN catchAnyWhichDeadlock_b; IF ~catchAnyWhichDeadlock THEN catchAny_FALSE END; catchAny: PUBLIC BOOL _ TRUE; catchAnyWhichDeadlock: PUBLIC BOOL _ TRUE; NoteProfileChange: UserProfile.ProfileChangedProc = BEGIN catchAny _ UserProfile.Boolean["Chipndale.CatchLowLevelErrors", TRUE]; catchAnyWhichDeadlock _ catchAny OR UserProfile.Boolean["Chipndale.CatchErrorsWhichCauseDeadlock", TRUE] END; InitShades: PROC [] = BEGIN CDColors.DefineColor[CD.highLightShade, NEW[CDColors.Brick_[101H,0,0,0]], bw]; CDColors.DefineColor[CD.highLightShade, NEW[CDColors.Brick_[0,0F0FH,0,0]], bit4]; CDColors.DefineColor[CD.highLightShade, NEW[CDColors.Brick_[0,255,0,255]], bit8]; CDColors.DefineColor[CD.highLightError, NEW[CDColors.Brick_[101H,0,101H,0]], bw]; CDColors.DefineColor[CD.highLightError, NEW[CDColors.Brick_[0,0F0FH,0,0F0FH]], bit4]; CDColors.DefineColor[CD.highLightError, NEW[CDColors.Brick_[0,255,255,255]], bit8]; END; InitShades[]; UserProfile.CallWhenProfileChanges[NoteProfileChange]; CDValue.StoreInt[boundTo: NIL, key: $CDxInitGrid, value: CD.lambda]; END. TCDVInit.mesa Copyright c 1983, 1984 by Xerox Corporation. All rights reserved. by Christian Jacobi August 5, 1983 11:07 am last edited by Christian Jacobi September 20, 1984 10:50:16 am PDT ----- --further initializations -------------------------------- -------------------------------- -- PROC [reason: ProfileChangeReason] Ê%˜šœ ™ Jšœ Ïmœ7™BJšœ.™.JšœD™DJ˜—šÏk ˜ Jšžœ˜Jšœ˜Jšœ ˜ Jšœ ˜ Jšœ ˜ Jšœ ˜ —J˜šÏnœžœž˜Jšžœ4˜