Boy, it seems like the bad old days to pass pointers as longs, but so be it (at least until the next generation of CPU's comes along a changes the pointer sizes).
If we think it's acceptable to embed pointers (I'm assuming the pointer is the address of the first position in an array of known size), then I think it's logical to put the species info (__sp_info) into the __stand structure. To be safe, we'll probably have to either 1) require a stopping code in the structure, or 2) place a count field into the stand structure.
What do you think? And, are there other important variable length fields needed?
The callback functionality is going to be important eventually. Some validation can be done by the growth model, but more needs to be done by the client. Also, it would be great to have pre- and post-growth processing handled by callbacks. I know you can pass pointers (I wasn't specific before), but can you pass pointers to functions across language platforms?