OK, I streamlined the code, and passing the values generally works now, with a few odd glitches. In this example, I want to pass the frame prim's position, the root prim's position, and a flag for weather or not the frame IS the root, to a child prim. (In a later step, I'll need to be able to change how I handle moving the child prim, based on weather or not the frame prim is the root.)
In the frame prim, I have:
vector g_LocalPos; //pos of frame prim
vector g_RootPos; //pos of Root prim
list CollectedData; //List to send
string DataString; //List parsed into string form
integer FrameRoot; //True if frame is root prim, else false
default
{
touch_start(integer total_number)
{
g_LocalPos = llGetLocalPos(); //get pos of frame prim
g_RootPos = llGetRootPosition(); //get pos of Root prim
if(g_LocalPos == g_RootPos){
llSay(0, "The Frame is the root"

;
FrameRoot = TRUE;
} else {
llSay(0, "The Frame is NOT the root"

;
FrameRoot = FALSE;
}
CollectedData = [g_LocalPos, g_RootPos, FrameRoot];
DataString = llDumpList2String(CollectedData,";"

;
// Show what was collected
llSay(0, "Local Position of Frame Prim is " + (string)g_LocalPos);
llSay(0, "Region Position of Root Prim is " + (string)g_RootPos);
llSay(0, "FrameRoot is " + (string)FrameRoot);
llSay(0, "Sending : " + DataString);
// send
llMessageLinked(LINK_SET, 3, DataString, NULL_KEY); // send prim info
}
}
In the Child prim, I have:
vector g_LocalPos; //pos of frame prim
vector g_RootPos; //pos of Root prim
list CollectedData; //List received
string DataString; //Incoming message, that was parsed into string form
integer FrameRoot; //True if frame is root prim, else false
default
{
link_message(integer sender_number,integer number,string DataString,key id)
{
if(number == 3) { // get root prim info
vector params_a = llGetLocalPos(); //get info on this prim
llSay(0, "Local Position of A Prim is " + (string)params_a);
// Display and compare Frame prim invo vs Root
llSay(0, "Incoming DataString is " + DataString);
CollectedData = llParseString2List( DataString, [";"], [] );
g_LocalPos = llList2Vector( CollectedData, 0 );
g_RootPos = llList2Vector( CollectedData, 1 );
FrameRoot = llList2Integer( CollectedData, 2 );
llSay(0, "g_LocalPos is " + llList2String( CollectedData, 0 ));
llSay(0, "g_RootPos is " + llList2String( CollectedData, 1 ));
llSay(0, "FrameRoot is " + llList2String( CollectedData, 2 ));
if(FrameRoot == TRUE){
llSay(0, "The Frame is the root"

;
} else {
llSay(0, "The Frame is NOT the root"

;
}
}
}
}
Which gets this result:
[11:53] Reporter Prim (frame): The Frame is NOT the root
[11:53] Reporter Prim (frame): Local Position of Frame Prim is < 0.00000, 0.00000, -0.50000 >
[11:53] Reporter Prim (frame): Region Position of Root Prim is < 104.76440, 21.04572, 701.00000 >
[11:53] Reporter Prim (frame): FrameRoot is 0
[11:53] Reporter Prim (frame): Sending : < 0.000000, 0.000000, -0.500000 >;< 104.764397, 21.045717, 701.000000 >;0
[11:53] Child A: Local Position of A Prim is < -0.50000, 0.00000, -0.50000 >
[11:53] Child A: Incoming DataString is < 0.000000, 0.000000, -0.500000 >;< 104.764397, 21.045717, 701.000000 >;0
[11:53] Child A: g_LocalPos is < 0.000000, 0.000000, -0.500000 >
[11:53] Child A: g_RootPos is < 104.764397, 21.045717, 701.000000 >
[11:53] Child A: FrameRoot is 0
[11:53] Child A: The Frame is NOT the root
The "HUH?" here is, why is the vector that has been parsed to string form different than the original? It has 6 digits after the decimal, instead of 5? Is there any way to pass the data so the same values are had on both sides?
There also seems to be a rounding error. I've seen values that should be something like 120.42200 get translated as 120.422032 .