If you hace multiple objects selected and use the scale tools, they all scale around a single point and the group gets bigger. Often, you want each object to scale around its own center. That is what this script does.
Use as you see fit, but at your own risk. Please credit me if you use this.
Pat
============
Procedure ScaleEachObject;
{Scales each selected object in the active layer around the obejct center}
{? 2007, Coviana, Inc - Pat Stanford pat@coviana.com}
{Licensed unde the GNU Lesser General Public License}
Var H1,H2:Handle;
N1,N2:Integer;
A1:Dynarray[ ] of handle;
R1:Real;
Begin
N1:=Count(Sel);
If N1>0 then
Begin
Allocate A1[1..N1];
N2:=1;
While N2<=N1 do
Begin
A1[N2]:=FSActLayer;
SetDSelect(FSActLayer);
N2:=N2+1;
End;
R1:=RealDialog('Enter the amount to scale each object by','2.0');
N2:=1;
While N2<=N1 do
Begin
SetSelect(A1[N2]);
Scale(R1,R1);
DSelectAll;
N2:=N2+1;
End;
End
else AlrtDialog('At least one object must be selected');
End;
Run(ScaleEachObject);
============

Here is an updated version of the Rotate Each Object Script. It has been modified to work around a bug that was found in the Scale Each Object script.
Procedure RotateEachObject;
{Rotates each selected object in the active layer}
{Symbols and PIOs are rotated around the insertion point}
{Other Objects are rotated around their center point}
{? 2007,2008,2010 Coviana, Inc - Pat Stanford pat@coviana.com}
{Licensed unde the GNU Lesser General Public License}
Var H1,H2:Handle;
N1,N2:Integer;
A1:Dynarray[ ] of handle;
R1,X1,Y1 :Real;
Begin
N1:=Count(Sel);
If N1>0 then
Begin
Allocate A1[1..N1];
N2:=1;
While N2<=N1 do
Begin
A1[N2]:=FSActLayer;
SetDSelect(FSActLayer);
N2:=N2+1;
End;
R1:=RealDialog('Enter the amount to rotate each object by','90.0');
N2:=1;
While N2<=N1 do
Begin
If ((GetType(A1[N2]) = 15) or (GetType(A1[N2])=86)) then GetSymLoc(A1[N2],X1,Y1)
else
HCenter(A1[N2],X1,Y1);
HRotate(A1[N2],X1,Y1,R1);
N2:=N2+1;
End;
End
else
Begin
N1:=0;
AlrtDialog('At least one object must be selected');
End;
End;
Run(RotateEachObject);