So, there's a base pointer somewhere and then the value for each of the individual pointers is the running total of the lengths of all the previous strings or the distance from the base pointer? E.g. if each string happens to be $10 long, you'd have pointer values like $00, $10, $20, etc.?

If so, then yes, you could extract that pretty normally with "#METHOD: POINTER_RELATIVE", setting "#BASE POINTER:" to whatever the address of the first string is. You'd then get pointer values of <first string address> + $00, <first string address> + $10, <first string address> + $20, etc. lining up with your string addresses.

For insertion, you could use the new CALCVAR features, filling in <> variables with your desired values:

`// define some variables`

#VAR(base, CALCVAR)

#VAR(length, CALCVAR)

// jump to insertion point, set an upper bound on insertion address

#JMP(<script start>, <script stop>)

// save current address into "base" variable

#CALC(base, "!CURRENT_ADDRESS")

// calculate "length" = current address - "base" (= $00 since they're currently the same value)

#CALC(length, "!CURRENT_ADDRESS - !base")

// use the current value of "length" ($00) as the value for the first pointer

#W8(length, <pointer 0 address>)

String #1 here.[end]

// calculate "length" = current address - "base" (= $10 since string 1 was $10 long)

#CALC(length, "!CURRENT_ADDRESS - !base")

// use the current value of "length" ($10) as the value for the second pointer

#W8(length, <pointer 1 address>)

String #12 here.[end]

// calculate "length" = current address - "base" (= $20 since both strings 1 and 2 were $10 long)

#CALC(length, "!CURRENT_ADDRESS - !base")

// use the current value of "length" ($20) as the value for the third pointer

#W8(length, <pointer 2 address>)

String #3 here.[end]

// etc.