Package Tool Functions?

I have been contemplating a set of "PackageTools" type functions for general consumption:

Function PackageSetup(name,[keywords ....])
     string name
     .... others ...

     string thePackageFolder, thePackageFile, thePackageInfo, thePackageAuthor
     variable thePackageVersion, hasHelp

     // stores information about the package in root:Packages:PackageTools
     // as a keyword=value list

     // creates the root:Packages:"packagefolder" folder


Function PackageRemove(name,[options ...])
    string name

    // removes the package (kills off its package folder)


Function PackageHelp(name)

   // opens a help file if the package registers that it has such
   // otherwise shows an alert "No Help for Package ..."


Function PackageFolderDFR(name,[options ...])
     string name

     return (the DFREF for the given package name considering options)

Example uses are ...

* A call to PackageSetup("ScreenSizer",hasHelp=1,version=2.3) would create the string root:Packages:PackageTools:ScreenSizer with contents "thePackage=ScreenSizer;thePackageFolder=root:Packages:ScreenSizer;hasHelp=1;version=2.3" and would also create the data folder root:Packages:ScreenSizer

* A further call can add other keywords ... PackageSetup("ScreenSizer",author="Jeffrey J Weimer", info="A way to size windows by percent values")

* A call PackageRemove("ScreenSizer",quiet=1) would (silently) kill off the package folder (remove it from the experiment)

* A call such as below gets the location of certain globals for the package ...

    DFREF pf = PackageFolderDFR("ScreenSizer",folder="screenparameters")
    NVAR screenwidth = pf:screenwidth

As my thinking often tends toward "standardization", my thoughts are that new (and seasoned) programmers might find use in having a base set of such "package tools". In this regard, I would be generating the commands in a procedure file that should be definition always be put in the Igor Procedures folder so as not to have to #include it.

I already have similar overhead in my procedures now (through such things as StrConstant thePackageFolder="...", Constant thePackageVersion=...), and I am using Help() and RemoveMe() type functions as well (see

Any thoughts on this idea?
I have just released the first version of the package for comments.

J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAHuntsville