home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Merciful 3
/
Merciful_Release_3.bin
/
software
/
d
/
draw_studio
/
drawstudiov1.0.2a.dms
/
drawstudiov1.0.2a.adf
/
DSdir1.lha
/
Rexx
/
Tile.dsrx
< prev
next >
Wrap
Text File
|
1996-11-03
|
4KB
|
175 lines
/* 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