Here's a sketch of how I've setup our layer/style control.
I have a text style/layer routine (txstla) (long before reactors but looking at that soon) that:
1.) Reads Current space If it's MS
-- It reads the current DIMSCALE
If the current space is PS
-- It reads the current DIMLFAC
2.) It then puts together a style/layer name "TEXT" plus the DIMSCALE/DIMLFAC = TEXT48
3.) It then checks to see if that layer exists, if it does it sets it current, if not it makes it based on a layermake function I have.
4.) Then it checks is that style exists (TEXT48, we use text height set in the style) if it does it sets it current, if not it creates it based on a sylemake function I have.
Okay, so now I've made or set the right style and layer current in this function. Notice I didn't collect the current style and layer data for return later. Basically, I don't care, if the user is in annotation mode, he'll be there a while.
I have another that does nearly the same for DIM style and layers using "DIM" as the prefix.
Now if I had a reactor setup to run these whenever the command was issued it'd be real cool, but I haven't taken the time for that yet. But what I have done is prefix every possible way a user can inout text with the function (txstla). All the shorthand functions and autolablers we have, all the menu locations and buttons, yada yada yada, then undefined the MTEXT and TEXT and DTEXT functions entirely and setup MT, TX and DT in thier place. Someone has to know how to get around it it to screw it up. One of the things we stress NOT to do in our training sessions.
Now for client specific layer/style names all I need do is modify the (txstla) function and everything is rosy.