Nice work!
Some notes:
1) With emc 2.4 (and later) you could use the built-in numbered parameter #5400 for the tool number and eliminate maintaining the global #<_Tool:Number>
2) The tool changing subroutine seems to be duplicated in several files. For emc2.5, you could have one changetool.ngc subroutine in a directory specified by the inifile path list:
[RS274NGC]SUBROUTINE_PATH
To prevent ngcgui confusing this type of "utility" subroutine with ngcgui-compatible subroutine, mark it with the special comment:
(not_a_subfile)
Example:
$ cat changetool.ngc
(not_a_subfile)
o<changetool> sub
#<ToolNumber>=#1
#<Coolant>=#2
O120 if [#5400 NE #<ToolNumber>]
... etc
O120 endif
o<changetool> endsub
3) The use of numbered parameters above #5000 might run into problems with emc built-in assignments in the future. Numbered parameters below #5000 are probably a better choice. More generally, local, named parameters offer less chance of conflict and are more readable too.
4) The use of global named parameters as inputs to ngcgui is deprecated and could become incompatible in the future. It is ok (and often necessary) to use global named parameters to return subroutine results. The only instances i noted are in start.ngc:
#<_Max:RPM> = #2 (=1400 Max Spindle RPM)
#<_Tool:Number> = #3 (=1 Tool Number)
could be remedied simply as:
#<maxrpm> = #2 (=1400 Max Spindle RPM)
#<tno> = #3 (=1 Tool Number)
...
#<_Max:RPM> = #<maxprm>
#<_Tool:Number> = #<tno>