A (Standard) Way to Get Help on and Remove Packages

This code snippet is designed to get help on or remove a package from an experiment
As a suggestion for making this standard ... the package should follow a
few conventions as explained in CAPITAL LETTERS as DEFINED or OPTIONAL

MyPackage#Help() will show the help window for the package
MyPackage#RemoveMe() will remove the package named MyPackage

To use this, change all occurrances of the phrase "MyPackage" to the name of your package. Include your package functions in the section marked for them.

// OPTIONAL IGOR PRO INFORMATION
 
#pragma rtGlobals=1
#pragma IgorVersion=6.10
 
// DEFINED PACKAGE INFORMATION
// package name and version number
// substitute the name of your package for "MyPackage"
// also define a version number for your package
 
#pragma ModuleName=MyPackage
#pragma version=1.0
 
// OPTIONAL HIDE PARAMETER
// hides your package from the procedure windows list
// this parameter is not needed when your package is also an IndependentModule
 
#pragma hide=1
 
// DEFINED PACKAGE STRING CONSTANTS
// When you have none of these, you must still define them but set them blank
// ie Static StrConstant theProcedureFile = ""
// thePackage - name of your package
// thePackageFolder - where you store your package values
// theProcedureFile - the (main) procedure file associated with your package
// hasHelp - 0: no help provided; 1 - help file (appropriately named by package name) is provided
 
Static StrConstant thePackage="MyPackage"
Static StrConstant thePackageFolder="root:Packages:MyPackage"
Static StrConstant theProcedureFile = "MyPackage.ipf"
Static Constant hasHelp = 1
 
// OPTIONAL LANGUAGE LOCALIZATION
// Otherwise remove this and the next optional part
 
#define English
 
// OPTIONAL STRING CONSTANTS
// example shown on how to use language localization
// otherwise substitute an actual string for KillMeRequest in the RemoveMe() function
 
#ifdef English
Static StrConstant KillMeRequest="Do you really want to remove MyPackage?"
#endif
#ifdef Deutsch
Static StrConstant KillMeRequest="Soll MyPackage wirklich entfernt werden?"
#endif
 
// START DEFINED PACKAGE FUNCTIONS
// (start) put your definitions, includes, functions, macros, and other components in this section
 
 
// (end) put your definitions, includes, functions, macros, and other components in this section
// END DEFINED PACKAGE FUNCTIONS
 
// DEFINED HELP FUNCTION
// call with topic = "topic string" to get specific help on a particular topic string
 
Static Function Help([topic])
      string topic
 
       string HelpStr = ""
 
    if (!hasHelp)
               sprintf HelpStr, "NO HELP FOR PACKAGE %s!", thePackage
        DoAlert 0, HelpStr
        return 0
    endif
 
    if (strlen(thePackage)!=0)
                if (ParamIsDefault(topic))
                 DisplayHelpTopic/K=1 thePackage
                else
                         sprintf HelpStr, "%s[%s]" thePackage, topic
                 DisplayHelpTopic/K=1 HelpStr
                endif
    else
        DoAlert 0, "NO PACKAGE NAME FOR HELP!"
        return -1
    endif
    return 0
end
 
// DEFINED REMOVEME FUNCTION
// Remove Me
// quiet (optional): 0 (default) - prompt to remove; anything else - no prompt
 
Static Function RemoveMe([quiet])
    variable quiet
    
    if (ParamIsDefault(quiet) || (quiet == 0))
        DoAlert 1, KillMeRequest    
        if (V_flag == 2)
            return 0
        endif
    endif
        
    if (strlen(thePackageFolder)!=0)
        KillDataFolder/Z $thePackageFolder
    endif
    
    string theCmd
    if (strlen(thePackage)!=0)
        sprintf theCmd "DELETEINCLUDE \"%s\"" thePackage
        Execute/P/Z/Q theCmd
    endif
    if (strlen(theProcedureFile)!=0)
        sprintf theCmd "CloseProc/NAME=\"%s\"" theProcedureFile 
        Execute/P/Z/Q theCmd
    endif
    
    return 0
end
Jeffrey,

thanks very much for this snippet!
I was about to write a standard package removal mechanism myself, but this is a great starting point.

Just two minor comments:
1) In the language part, the StrConstant construct requires a literal string, so one has to write something like:
#ifdef English
Static StrConstant KillMeRequest = "Do you really want to remove MyPackage ?"
#endif
#ifdef Deutsch
Static StrConstant KillMeRequest = "Soll MyPackage wirklich entfernt werden ?"
#endif


2) The header of function lacks the definition of the optional topic parameter, thus we need:
Static Function Help([topic])
string topic


Wolfgang Harneit
Yes, thank you. Changes in process. Also thanks for the corrections to my German.

I wonder, should this coding perhaps be formalized into a modular package??? I am using it now as an ending in all my other packages.

What do you think?

--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH

Forum

Support

Gallery

Igor Pro 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More