* MyClasses.PRG define class StringFunctions as Custom && Or whatever, String related functions function myStringFunction1(myParametersList) endfunc function myStringFunction2(myParametersList) endfunc enddefine define class ArrayFunctions as Custom && Or whatever, Array related functions function myArrayFunction1(myParametersList) endfunc function myArrayFunction2(myParametersList) endfunc enddefine define class DataFunctions as Session && This are functions that will use tables, thus I use Session as baseclass function myDataFunction1(myParametersList) endfunc function myDataFunction2(myParametersList) endfunc enddefineThen in programs or forms or classes
loDataFunctions = newobject('DataFunctions', cSomeBasePath + 'MyClasses.PRG') && or thisform.DataFn = newobject('DataFunctions', cSomeBasePath + 'MyClasses.PRG') ... loDataFunctions.myDataFunction(someParameterList) && or thisform.DataFn.myDataFunction(someParameterList)This way you get rid of SET PROCEDURE altogether, and with that you get rid of some code, for example you do not need to store the current set("procedure") at the beginning of some processs and then restore it back at the end, something you should do, in particular if there are chances that the PRGs have some common named functions