This section contains some typical 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
BASIC 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 of all: 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.BAS'.
FIND i AND FILE_SPEC="PROG.BAS"
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 BASIC.)
Often, you only want to know where (in what file or module) a
particular function 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
function) and then look through the output. The output would
include all occurrences of the function, one of which would be
its definition, 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 BASIC function, this means the
actual location of the function body. This is as opposed to
an associated declaration, examples of which are EXTERNAL
declarations, and DECLARE FUNCTION 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 functions, constants, labels, and so forth. Suppose
you want to find only the functions 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=FUNCTION
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, FUNCTION). 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 functions called directly and
indirectly), of the function 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 could have an LSE query buffer containing
something that looks like the following:
I variable
BASIC_MODULE\60 variable declaration
BASIC_MODULE\75 write reference
BASIC_MODULE\79 read reference
BASIC_MODULE\95 address reference
BASIC_MODULE\122 read reference
BASIC_MODULE\144 write reference
BASIC_MODULE\146 read reference
BASIC_MODULE\149 write reference
BASIC_MODULE\149 read reference
BASIC_MODULE\150 address reference
BASIC_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 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.