LSE$CLIHELP.HLB  —  SCA Topics, Getting Started
line, for example, PASCAL foo.pas Include Include A file specified in an INCLUDE statement Precompiled Environment A file specified in an INHERIT clause Reference Reference Any nondeclaration Explicit Pascal has no implicit occurrences. Everything is explicit. Implicit N/A Visible Appears in the source Hidden Does not appear in the source, for example, VAR I : INTEGER VALUE 10 has a hidden write reference. Compilation_ Module, unit Program The following table lists the SCA domain classes and their corresponding meanings in Pascal. SCA Domain Classes and Equivalent Pascal Language Terminology SCA Term Pascal Term Explanation Inheritable Inherited or Items in an environment file and inheritable items inherited from an environment file Global GLOBAL Items declared with the GLOBAL attribute Predefined Predeclared For example, INTEGER, TRUE, WRITELN Multi_module Inheritable, Global, Predefined Module_ Items local to a compilation unit, specific and not in an environment file

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
Close Help