I don't recognize the following API saving convention:
Save:
filter$ = "RTM files (*.rtm)|*.rtm|All Files (*.*)|*.*"
F$ = call dll(1,"savedialog",filter$,"rtm","Save RTM File",GET DIR$() )
I'm assuming this is from a custom DLL that accesses the windows api itself, because this is not a call to the windows API save function. If you were actually making a call to the windows api it would look like:
value=call dll(<dll number>,"GetSaveFileNameA",lpOPENFILENAME)
The lpOPENFILENAME is a pointer to a structure that contains all the aspects of the file(s) and dialog box that you want to save or open. One of the flags that can be set is OFN_ALLOWMULTISELECT which allows the multiple selection of files. But I don't think this will help with your question.
If your save function works to save a single object, why not set up an array that stores all of the scaling of the various objects you want to save. The positions are already easily referenced by OBJECT POSITION etc. Then setup a loop and run through the save routine each iteration of the loop replacing the info of the specific object (including the scale that you saved in your custom array). When you load back the information, remember to include a reference to your array of scale values. If you need to save the objects as different files, then you would have to open and close the file number reference in between the save call in the loop, if not, leave it open and use an indicator between objects that identifies the start and end of a saved object.
Any particluar reason your are writing LONGs instead of floats? The object's position could be fractional.
Enjoy your day.