15 – Using SCAN
This section contains some basic examples that illustrate what SCA can do to help you with your programs. The examples have very little explanation. If you want a more detailed explanation of the underlying concepts, see the Basic_Query_Concepts help topic. The remainder of this section is written in terms that are specific to SCAN programs. If you want to follow along and try the examples, you will need to have an SCA library available. If you do not know how to create an SCA library, read the Building_An_SCA_Library help topic. The examples use generic variable names (such as i). You will have to substitute variable names that actually exist in your code when trying the examples. The first example is the easiest query: It lets you find all the items in your SCA library named i, and shows you all the places where they appear (all occurrences of i). FIND i You can search for any name in this manner, including using wildcard characters (for example, FIND i*). Now let's say you are looking for an occurrence, and you know that it occurs in a particular file. The following query finds all occurrences of items that are named i but will then limit them to those which happen to occur in the file named 'PROG.SCN'. FIND i AND FILE_SPEC="PROG.SCN" Another typical question one might ask is "Find all the places where this item is assigned to (or read from, called, declared, and so forth)." The next example finds all occurrences of items that are named i, but then limits them to only those occurrences where i is assigned a value. FIND i AND OCCURRENCE=WRITE (SCA understands many occurrence classes other then WRITE. See the help subtopics under Getting_Started for tables containing all the SCA attributes and their corresponding meanings in SCAN.) Often, you only want to know where (in what file or module) a particular procedure is, so that you can go to it and edit it. You could use the first query (where i would be the name of the procedure) and then look through the output. The output would include all occurrences of the procedure, one of which would be its declaration, which you could then select. Or, you could ask SCA to limit the search for you by typing the following query: FIND i AND OCCURRENCE=PRIMARY In SCA terms, a primary declaration is the most significant declaration of an item. For a SCAN procedure, this means the place where the procedure is actually implemented, that is, the PROCEDURE declaration. This is in contrast to FORWARD or EXTERNAL declarations, which are associated declarations Another problem you might have is that there are many different items in your system having a given name. Some may be variables; others may be procedures, constants, labels, and so forth. Suppose you want to find only the procedures named i. Again, the query FIND i would give you what you wanted, but it would also give you much more. It is preferable to issue the following query: FIND i AND SYMBOL_CLASS=PROCEDURE The last four examples have all selected information based on two attributes. The last example selected information based on a name attribute (in this case, i) and a symbol class attribute (in this case, PROCEDURE). Note how the attributes are combined using the boolean operator AND. In general, you can select items out of your library based on any combination of attributes, using AND as well as the other logical operators OR, XOR and NOT. The next example shows another primary feature of SCA - the ability to display relationships between items. The example given here shows the most common use of this feature. It finds the complete call tree (that is, all procedures called directly and indirectly), of the procedure named i. FIND CALLED_BY (i, DEPTH=ALL) If you want to limit the depth of the call tree, you can replace the keyword ALL by any positive integer. The final part of this section describes how to go directly to the source code once you have issued a query. After issuing the query FIND i, for example, you can have an LSE query buffer containing something that looks like the following: I variable SCAN_MODULE\60 variable declaration SCAN_MODULE\75 write reference SCAN_MODULE\79 read reference SCAN_MODULE\122 read reference SCAN_MODULE\144 write reference SCAN_MODULE\146 read reference SCAN_MODULE\149 write reference SCAN_MODULE\149 read reference SCAN_MODULE\150 read reference SCAN_MODULE\166 read reference The first two lines of this display will be highlighted. The first line represents the item you looked for (i), and the rest of the lines represent the different places in the code where this item occurred (that is, the occurrences of i). By using the up and down arrows on your keyboard, or by clicking on an occurrence with your mouse, you can choose the occurrence you want to see. Then all you have to do is type CTRL/G (the keyboard equivalent of the GOTO SOURCE command), and LSE will bring the source file into a buffer and position you at the occurrence you chose. To obtain help on the following topics, request help as indicated. o For help on query language, see the Basic_Query_Concepts help topic. o For help on libraries, see the Building_An_SCA_Library help topic.
16 – SCAN Attributes Table
The following table lists the SCA symbol classes and their corresponding meanings in SCAN. SCA Symbol Classes and Equivalent SCAN Language Terminology SCA Term SCAN Term Explanation Argument Formal A routine or function formal parameter parameter Component, Leaf node A leaf node of a TREE variable Field Constant, Constant A CONSTANT definition Literal Exception N/A File File A file used during compilation Function, Procedure A Procedure Procedure, Program, Routine, Subroutine Generic N/A Keyword N/A Label Label A statement label Macro N/A Module, Module A module Package Placeholder N/A Psect Psect A psect name Tag N/A Task N/A Type Type Unbound N/A Variable Variable The following table lists the SCA occurrence classes and their corresponding meanings in SCAN. SCA Occurrence Classes and Equivalent SCAN Language Terminology SCA Term SCAN Term Explanation Primary Declaration Either a DECLARE or PROCEDURE declaration Associated Declaration Either a FORWARD or EXTERNAL declaration Declaration Declaration Either primary or associated Read, Fetch Reference The value of a variable is retrieved. Write, Store Assignment A variable is assigned a value. Address, Indirect Pointer reference Call Call Command_line Command line A file specified on the command line; for example, SCAN foo.scn. Include Include A file included with the INCLUDE statement Precompiled N/A Reference Reference Any nondeclaration Explicit Explicit A variable or procedure explicitly declared with DECLARE or PROCEDURE statement Implicit Implicit A variable declared by the compiler on first reference, for example, a picture variable Visible N/A Hidden N/A Compilation_ Module unit The following table lists the SCA domain classes and their corresponding meanings in SCAN. SCA Domain Classes and Equivalent SCAN Language Terminology SCA Term SCAN Term Explanation Inheritable N/A Global Global Declaration has GLOBAL attribute Predefined Predefined Multi_module Global or predefined Module_ Local to one module specific