I have been using work offsets to help me when using multiple vises. This works great in Mach3 and with subprograms its even greater.
The downside is that if I need to change tools say 5 times on the part, then each vise or work offset that I use is 5 more of the same tools changes. (3 work offsets is 15 tool changes) I wanted a way to change the tool, then work that tool on each of the offsets before going onto the tool change (3 work offsets and only 5 tool changes just like in the original NC program)
So I have created a simple tool that reads in a NC file and looks for tool changes, then inserts the work offset G Codes for each tool. This keeps tools changes to the same number as before while working each of the desired work offsets.

This is also handy when you have a NC file today, but tomorrow you want to use 2 or 3 vises for the same part.
Its not perfect, but it works. I have attached all the Visual C++ project files needed if you want download and build/modify it to your needs. Or you can try the EXE file.
Thanks,
JH