| **Navigation:**  [[templates.htm|Templates]] > [[tlrcontents.htm|Template Language Reference]] > Complete Alpha Listing >====== #UTILITY (utility execution section) {{c6h0068.jpg|C6H0068.jpg}} ====== | [[ unfix unfix a multi value symbol .htm|{{btn_prev_n.gif|Previous page}}]][[tlrcontents.htm|{{btn_home_n.gif|Return to chapter overview}}]][[ validate validate prompt input .htm|{{btn_next_n.gif|Next page}}]] | | || **#UTILITY(** //name, description// **)** [, **HLP(** //helpid// **)** ] [, **WIZARD(** //procedure// **)** ] {{blk2blue.jpg|blk2blue.jpg}} | **#UTILITY** | Begins a utility generation control. | | //name// | The name of the #UTILITY which identifies it for the Template Registry. This must be a valid Clarion label. | | //description// | A string constant describing the utility section. | | **HLP** | Specifies on-line help is available. | | //helpid// | A string constant containing the identifier to access the Help system. This may be either a Help keyword or "context string." | | **WIZARD** | Specifies the #UTILITY is used as a Wizard to generate a procedure or a complete application. | | //procedure// | A string constant containing the fully qualified name of the #PROCEDURE for which it is a WIZARD. | The **#UTILITY** statement marks the beginning of a utility execution control section. The section is terminated by the next Template Code Section (#PROGRAM, #MODULE, #PROCEDURE, #CONTROL, #CODE, #EXTENSION, #UTILITY, or #GROUP) statement. The Template statements contained in this section control the utility execution process. Multiple #UTILITY sections are allowed in a single Template set. The #UTILITY section is very similar to the #APPLICATION section, in that it allows you to produce output from the application. The purpose of #UTILITY is to provide extensible supplemental utilities for such things as program documentation, or a tree diagram of procedure calls. The list of registered utilities appears in the Utilities menu in the Clarion for Windows environment. #UTILITY with the WIZARD attribute specifies it contains a #SHEET with #TABs that display one tab at a time, guiding the user through the prompts. **Example:** **#UTILITY****(ProcCallTree, 'Output procedure call tree')** **  #CREATE(%Application & '.TRE')** **Procedure Call Tree: for %Application** **#INSERT(%DisplayTree, %FirstProcedure, '', '  ')** **#CLOSE** **#!************************************************************* **#GROUP(%DisplayTree, %ThisProc, %Level, %NextIndent)** **  #FIX(%Procedure, %ThisProc)** **%Level+-%ThisProc (%ProcedureTemplate)** **  #FOR(%ProcedureCalled)** **    #IF(INSTANCE(%ProcedureCalled) = ITEMS(%ProcedureCalled))** **#INSERT(%DisplayTree, %ProcedureCalled, %Level & %NextIndent, '  ')** **    #ELSE** **#INSERT(%DisplayTree, %ProcedureCalled, %Level & %NextIndent, '| ')** **    #ENDIF** **  #ENDFOR** {{tipbox.jpg|TipBox.jpg}} Use the %UtilityArguments symbol to assign optional parameters for the target #UTILITY. **Example:** **#declare(%one)** **#declare(%two)** **#set(%one,extract(%UtilityArguments,'one',0))** **#set(%two,extract(%UtilityArguments,'two',0))**