| **Navigation:**  [[templates.htm|Templates]] > [[tlrcontents.htm|Template Language Reference]] > Complete Alpha Listing >====== #DECLARE (declare a user-defined symbol) {{c6h0068.jpg|C6H0068.jpg}} ====== | [[ debug toggle debug generation .htm|{{btn_prev_n.gif|Previous page}}]][[tlrcontents.htm|{{btn_home_n.gif|Return to chapter overview}}]][[ default default procedure starting point .htm|{{btn_next_n.gif|Next page}}]] | | || **#DECLARE**( //symbol// [, //type// ] ) [, **MULTI** ] [, **UNIQUE** ] [, **SAVE** ] **#DECLARE( **//symbol//** **[**, **//parentsymbol//]** **[, //type// ]** )** [, **MULTI** ] [, **UNIQUE** ] [, **SAVE** ] {{blk2blue.jpg|blk2blue.jpg}} | **#DECLARE** | Explicitly declares a user-defined symbol. | | //symbol// | The name of the symbol being declared. This must meet all the requirements of a user-defined symbol. This must not be a #PROMPT symbol or a variable in the same scope. | | //parentsymbol// | Specifies the parent of the //symbol//, indicating its value is dependent upon the current value in another symbol. This must be a multi-valued symbol. You may specify more than one //parentsymbol// if the //symbol// is dependent upon a set of symbols. This allows implicit multi-dimensional arrays. | | //type// | The data type of the //symbol//: LONG, REAL, or STRING. If omitted, the data type is STRING. | | **MULTI** | Specifies the //symbol// may contain multiple values. | | **UNIQUE** | Specifies a multi-valued //symbol// that cannot contain duplicate values. The values are stored in ascending order. This implicitly declares the symbol as multi-valued, the MULTI attribute is not required. | | **SAVE** | Specifies the value(s) in the //symbol// are saved between source generation sessions. A //symbol// with the SAVE attribute may only be declared in the #APPLICATION area. | The **#DECLARE** statement explicitly declares a user-defined //symbol//. This may contain a single value or multiple values. All user-defined symbols must be explicitly declared with #DECLARE except those declared on #GROUP parameters, and #PROMPT or #EQUATE statements. The MULTI attribute declares the //symbol// as multi-valued. This allows the #FIX, #FOR, #ADD, #DELETE, #SELECT, and #FREE statements to operate on the //symbol//. The UNIQUE attribute ensures all instances of a multi-valued //symbol// to be unique and sorted in ascending sequence. When UNIQUE is specified, MULTI is not required. The #ADD statement builds the //symbol// values in sorted order and only allows a single instance of every value in the //symbol// when each entry is added. If the #DECLARE statement contains one or more //parentsymbol// parameters, the user-defined //symbol// is dependent on the //parentsymbols//. This means a separate instance (or instances, if multi-valued) of the //symbol// is available for each instance of the //parentsymbol//. If there are no //parentsymbol// parameters, it is independent. #DECLARE may be used to create dependent //symbols//. The //parentsymbol// must be a multi-valued symbol, whetherit is a built-in or user-defined symbol. The SAVE attribute causes a //symbol's// value(s) to be saved at the end of source generation and restored when the #DECLARE statement is eXEcuted at the beginning of the next source generation session. A //symbol// with the SAVE attribute may only be declared in the #APPLICATION section. **Example:** **#APPLICATION('Sample One')** **#DECLARE****(%UserSymbol),SAVE                  #!Value saved after generation** **                                            #! and restored for next generation** **#DECLARE****(%ModuleFile,%Module),UNIQUE,MULTI  #!Level-1 dependent symbol** **#DECLARE****(%ModuleFilePut,%ModuleFile)        #!Level-2 dependent symbol** **#DECLARE****(%ModuleFileDelete,%ModuleFile)     #!Second Level-2 dependent symbol** **#DECLARE****(%FileList),MULTI                   #!Multivalued symbol** **#DECLARE****(%FieldListID,%FileList,LONG),UNIQUE** **#DECLARE****(%FieldList,%FieldListID)** **#DECLARE****(%FieldListType,%FieldListID)** **#DECLARE****(%Dest)                             #!implicitly STRING** **#DECLARE****(%Char, STRING)                     #!explicitly STRING** **#DECLARE****(%Idx,LONG)                         #!explicitly LONG** **#DECLARE****(%LnS,LONG)                         #!ditto** **See Also:     **[[ fix fix a multi value symbol .htm|#FIX]] ,[[ for generate code multiple times .htm|#FOR]] ,[[ add add to multi valued symbol .htm|#ADD]] ,[[ delete delete a multi valued symbol instance .htm|#DELETE]] ,[[ free free a multi valued symbol .htm|#FREE]] ,[[ equate declare and assign value to a user defined symbol .htm|EQUATE]]