ZealOS has a string indirection feature implemented with the same hash symbol table entry as #define macros, HTT_DEFINE_STR.  
Support for string lists is also provided, but it's not very efficient, though, you can make a hash table with a list using 
HashDefineListAdd().  See ::/System/DolDoc/DocInit.ZC.

If you have an @ as the first char of a define list entry, it is an alias for the prev entry num.

Each task can load its own Define strings.  Remember, when a Hash table is searched for a string, if it is not found, the 
parent task's table is searched.

The DolDoc framework supports text that changes based on entries in the task's symbol table.  Set a text entry with a D= arg, 
as in $TX,"",D="DD_MYSTRING"$.  See ::/Demo/DolDoc/DefineStr.ZC, ::/System/Define.ZC and ::/Doc/MemoryOverview.DD.

See ::/Demo/Define.ZC.