<> <> <> DIRECTORY CD; CDSequencer: CEDAR DEFINITIONS = BEGIN Command: TYPE = REF CommandRec; CommandRec: TYPE = RECORD [ a: ATOM _ NIL, design: CD.Design _ NIL, l: CD.Level _ CD.combined, n: CD.Number _ 0, pos: CD.DesignPosition _ [0, 0], -- final position of command sPos: CD.DesignPosition _ [0, 0], -- special position, start position, (exceptional: size) orient: CD.Orientation _ CD.original, ref: REF _ NIL, b: BOOLEAN _ FALSE, private: --PRIVATE-- REF CommandPrivate _ NIL ]; CommandProc: TYPE = PROC[Command]; QueueMethod: TYPE = {doQueueAndMark, doQueue, dontQueue, useDefault}; CommandPrivate: PRIVATE TYPE = RECORD [p: CommandProc, qm: QueueMethod]; ExecuteCommand: PROC [comm: CDSequencer.Command, design: CD.Design_NIL, as: ATOM_NIL, queue: QueueMethod _ useDefault]; <<--if as#NIL replaces comm.a>> <<--if design#NIL replaces comm.design>> ImplementCommand: PROC [a: ATOM, p: CommandProc, technology: CD.Technology_NIL, queue: QueueMethod _ doQueueAndMark]; <<--If technology is NIL implement for all technologies.>> <<--Reimplementing the same atom in a technology it already exists overwrites the command; >> <<--If the same atom is specified for a particular technology and all technologies,>> <<--the more specific implementation wins independent of order. >> <<--There is a (finite, short) list of atoms you MUST NOT use.>> <<--Don't fool with NIL CommandProc's if you don't know exactly how it works.>> <<--(NIL CommandProc's serves too install the list of commands you MUST NOT use.) >> AbortTheCommand: PROC [design: CD.Design]; Aborted: PROC [design: CD.Design] RETURNS [BOOL]; CheckAborted: PROC [design: CD.Design]; <<--IF Aborted[design] THEN SIGNAL TerminalIO.UserAbort>> END.