<> <> <> <> DIRECTORY CD, CDSequencer, Rope USING [ROPE]; CDCommandOps: CEDAR DEFINITIONS = BEGIN <<--Various tools to ease implementing commands>> TheApplication: PROC[comm: CDSequencer.Command, text: Rope.ROPE_NIL] RETURNS [aptr: CD.ApplicationPtr]; <<--extracts the application given a command>> <<--if returned application is nil, all the messages are made and caller should return quiet;>> <<--if returned application is not nil; text line is written and object is there>> ImplementSpecificCommand: PROC [specificAtom: ATOM, text: Rope.ROPE_NIL, tipBase: Rope.ROPE_NIL, useFor: Rope.ROPE_NIL, x: REF_NIL, technology: CD.Technology_NIL]; <<--Implements a command which is executed by using CDCallSpecific>> <<--specificAtom: handled through to select CDCallSpecific command>> <<--text: logged; defaults to tipBase>> <<--tipBase: How command is called in tiptable; defaults to specificAtom>> <<--useFor: Suffix letters appended to tipBase getting the tip table entry>> <<--x: handled through to CDCallSpecific>> <<--technology: NIL => all technologies>> <<--command will be queued and changeflag will be set>> WriteInfo: PROC[aptr: CD.ApplicationPtr, verbosity: INT_1]; RedrawApplication: PROC[design: CD.Design, aptr: CD.ApplicationPtr_NIL, erase: BOOL_TRUE]; CallWithResource: PROC [proc: PROC[CDSequencer.Command], comm: CDSequencer.Command, resource: REF, abortFlag: REF BOOL_NIL] RETURNS [skipped: BOOL]; <<--Monitoring commands using global resources >> <<--proc will be called with comm as parameter, but is skipped if resource is already in use >> <<--resource: typically atom; every resource is called only once at a time>> <<--abortFlag: will be set to TRUE if an abort event occurs while execution of proc>> <<--the procedure message on Terminal if it skipped the call, or, if abortFlag is true on return >> IsPushedIn: PROC [design: CD.Design] RETURNS [yes: BOOL] = INLINE { RETURN [ design^.actual.rest#NIL ] }; END.