<> <> <> <> DIRECTORY CD USING [DesignRect, Design]; CDDraw: CEDAR DEFINITIONS = BEGIN CommandTable: TYPE = REF CTableRep; <<--one commandtable is executed (emptied) by max one process>> <<--but arbitrary (typically only one) processes may fill the commandtable>> CTableRep: TYPE; CommType: TYPE = {none, rect, all, ref, sel, alldone, disapearforever}; <<--Do not "InsertCommand" alldone and disapearforever; they are generated implicitely>> <<--alldone: hint that temporary marks should be redrawn now>> <<--disapearforever: hint that no further commands will arrive>> Comm: TYPE = RECORD [ cmd: CommType, erase: BOOLEAN, rect: CD.DesignRect, ref: REF]; CreateCommandTable: PROC [design: CD.Design, clip: CD.DesignRect, cleanStopFlag: REF BOOLEAN] RETURNS [CommandTable]; <<--cleanStopFlag^ tells any drawing process to stop volunterly and to fetch the next>> <<--command. >> <<--cleanStopFlag^ must not be modified any more outside this monitor!!>> <<--until DeleteCommandTable is called>> <<--Users may request a stop by calling FlushCommands.>> ModifyCommandTable: PROC [design: CD.Design, ct: CommandTable, clip: CD.DesignRect]; <<--changes the clipping aera>> DestroyCommandTable: PROC [ct: CommandTable]; <<--no more calls of InsertCommand on ct allowed!!>> <<--draw process must disapear from itself,>> <<--when draw process dispears and contains nomore>> <<--reference of ct, it is subject for garbage collection >> <<--The cleanStopFlag is immediately set to TRUE and later>> <<--reset to FALSE when the draw >> <<--process stopped the current command, if it then fetches another >> <<--command it gets the disapearforever command.>> InsertCommand: PROC [ct: CommandTable, c: Comm]; InsertCommandAll: PROC [design: CD.Design, c: Comm]; FetchCommand: PROC [ct: CommandTable] RETURNS [c: Comm]; <<--waits till command is available or CommandTable deleted>> FlushCommands: PROC [ct: CommandTable]; <<--the drawing may stop after some time only,>> <<--and NOT immediately with procedure return>> <<--The stop-mechanism must still be improved: It should allow introduction>> <<--of an in-between process which "zusammenlegt" some rects to cause>> <<--less real drawing.>> END.