/* Allow commands to return results */ options results /* On error, goto ERROR:. Comment out this line if you wish to */ /* perform your own error checking. */ signal on error 'PROJECT_LOCK' /* BEGIN PROGRAM *************************************************/ /* PROGRAM: Tile.dsdr DESCRIPTION: General purpose script for tiling objects on a page. Place an object on the page, leaving a top and left margin and the object will be tiled to fill the page, leaving the same margin for the bottom and right of the page. A gutter value may be given to leave space between the tiled objects. DATE: 03/11/96 AUTHOR: Andy Dean */ /* Gutter values, in points */ GutterX = 0 GutterY = 0 REDRAW_OFF /* Get info on the selected object(s) */ OBJECT_SPECS_GET stem 'srcobj.' /* If there's more than 1 object, group them */ /* and store their name */ if srcobj.numselected > 1 then do OBJECT_GROUP stem 'srcgrp.' srcname = srcgrp.name end else do srcname = srcobj.name end /* Get the object specs */ OBJECT_SPECS_GET stem 'objspec.' marginx = objspec.left marginy = objspec.top objw = objspec.width objh = objspec.height /* Get the page specs */ PAGE_SPECS_GET stem 'pagespec.' /* How many times can we tile horizontally ? */ numx = pagespec.width - (2 * marginx) numx = numx / (objw + GutterX) /* How many times can we tile vertically ? */ numy = pagespec.height - (2 * marginy) numy = numy / (objh + GutterY) /* Tile the objects */ do ly = 0 to (numy - 1) do lx = 0 to (numx - 1) /* Don't clone onto original */ if lx + ly = 0 then do nop end else do /* Clone object */ OBJECT_CLONE '"'lx * (objw + GutterX)'"', '"'ly * (objh + GutterY)'"', /* Ungroup, if the src obj was ungrouped */ if srcobj.numselected > 1 then OBJECT_UNGROUP /* Select the source object again */ OBJECT_DESELECT OBJECT_SELECT '"'srcname'"' end end end /* If it was grouped, ungroup */ if srcobj.numselected > 1 then OBJECT_UNGROUP REDRAW_ON /* END PROGRAM ***************************************************/ 'PROJECT_UNLOCK' exit /* On ERROR */ ERROR: 'PROJECT_UNLOCK' /* If we get here, either an error occurred with the command's */ /* execution or there was an error with the command itself. */ /* In the former case, rc2 contains the error message and in */ /* the latter, rc2 contains an error number. SIGL contains */ /* the line number of the command which caused the jump */ /* to ERROR: */ if datatype(rc2,'NUMERIC') == 1 then do /* See if we can describe the error with a string */ select when rc2 == 103 then err_string = "ERROR 103, "||, "out of memory at line "||SIGL when rc2 == 114 then err_string = "ERROR 114, "||, "bad command template at line "||SIGL when rc2 == 115 then err_string = "ERROR 115, "||, "bad number for /N argument at line "||SIGL when rc2 == 116 then err_string = "ERROR 116, "||, "required argument missing at line "||SIGL when rc2 == 117 then err_string = "ERROR 117, "||, "value after keywork missing at line "||SIGL when rc2 == 118 then err_string = "ERROR 118, "||, "wrong number of arguments at line "||SIGL when rc2 == 119 then err_string = "ERROR 119, "||, "unmatched quotes at line "||SIGL when rc2 == 120 then err_string = "ERROR 120, "||, "line too long at line "||SIGL when rc2 == 236 then err_string = "ERROR 236, "||, "unknown command at line "||SIGL otherwise err_string = "ERROR "||rc2||", at line "||SIGL end end else if rc2 == 'RC2' then do err_string = "ERROR in command at line "||SIGL end else do err_string = rc2||", line "||SIGL end req_message TEXT '"'err_string'"' exit