Copying Between Arrays, Structures, and Unions

In Tibbo BASIC and C, you can copy entire arrays and structures. In C, you can additionally copy unions.

For arrays, copying is only allowed between arrays of identical types. Destination and source array sizes need not be equal — TiOS will only copy what fits in the destination or what's available in the source, depending on which array is smaller.

For structures (and also unions in C), copying is only allowed between the structures of the same type.

Tibbo BASIC
Tibbo C
dim ar1(10) as word
dim ar2(5) as word
dim ar3(12) as word
dim ar4(10) as byte

ar2=ar1         'this will work, 5 elements will be copied
            '(the destination is smaller than the source)
ar3=ar1         'this will work, 10 elements will be copied
            '(the source is smaller than the destination)
ar4=ar1         'this will generate compiler error ("type mismatch") --
            'you cannot copy from an array of words into an array of bytes

type othertype
   ar(2) as integer
   s as string(4)
end type
   
type bastype         'this type includes a variable ot of the othertype
   x as byte
   ot as othertype
end type

dim ot as othertype
dim bt as bastype

ot=bt.ot         'this will work, the source and the destination are of the same type
ot=bt            'this will generate compiler error ("type mismatch")
 
'unions are only supported in C
unsigned int ar1[10];
unsigned int ar2[5];
unsigned int ar3[12];
unsigned char ar4[10];

ar2=ar1;         //this will work, 5 elements will be copied
            //(the destination is smaller than the source)
ar3=ar1;         //this will work, 10 elements will be copied
            //(the source is smaller than the destination)
ar4=ar1;         //this will generate compiler error ("cannot cast") --
            //you cannot copy from an array of words into an array of bytes

struct otherstruct{
   unsigned int ar[2];
   string<4>s;
};
   
struct cstruct{      //this type includes a variable ot of the othertype
   unsigned char x;
   otherstruct os;
};

otherstruct os;
cstruct cs;

os=cs.os;         //this will work, the source and the destination are of the same type
os=cs;         //this will generate compiler error ("cannot cast")
 
struct pod_struct1{
   int i;
   int j;
}ps1;

struct pod_struct2{
   char c;
   long l;
}ps2;
   
union pod_union{
   pod_struct1 ps1;
   pod_struct2 ps2;
}pu;   
   
ps1=pu.ps1;         //this will work, the source and the destination are of the same type
ps1=pu.ps2;         //this will generate compiler error ("cannot cast")