***** Note. SCNSRC provides a similar function to FNDSTRPDM. The
output of SCNSRC differs and is generally preferable to FNDSTRPDM.
The SCNSRC command allows a simple method of scanning source files
for a matching character string or strings. For example, assume you
want to know all the places in your QRPGSRC file where you have
specified the field ACCRCV. The SCNSRC command can be used to scan
all members of a source file (or generic members) and print a listing
with the member name, statement number and the statement where the
field has been used.
To scan the QRPGSRC file for all use of the argument ACCRCV you would
SCNSRC FILE(*RPG) ARGUMENT(ACCRCV)
The command operates on all members of a source file, a specifically
named member or generic members. It utilizes the OVRDBF MBR(*ALL)
value to process all members and the RPG SCAN op code to scan for the
specified argument. The output is spooled using a file name of the
file that was scanned. Each spooled file contains any source
statements where the argument or arguments were found, member
identification and summary totals.
An option exists to end the scan on the first found statement. This
can be helpful when you are attempting to copy source and need to
know where the first instance exists that you have used an argument.
An output file containing the member identification and the source
statement containing the argument may be optionally output to the
SCNSRCP file. The spooled listing is always output on each use of
SCNSRC is a faster scan technique that using OPNQRYF against multiple
members. OPNQRYF does not allow OVRDBF MBR(*ALL) and has more
overhead than a normal open of a member.
The command operates on source files of up to a length of 240 (228
bytes of source, 6 bytes of sequence number and 6 bytes for date of
change). To allow for a fast execution, the processing program
issues an OVRDBF to allow for 200 records to be read at a time. This
is useful for batch, but may be undesirable in an interactive
environment. You may wish to restrict the command to batch usage
Note that the scan function will only be successful if the matching
string is completely within a single source record. If the source
language being scanned (e.g. CL) supports a syntax which allows a
single statement to span multiple records, the scan will only be
successful when the entire matching string is contained in single
Command parameters *CMD
FILE The source file name and library. The library
defaults to *LIBL. To simplify the entering of
system supplied source file names, you may use the
standard abbreviations like *RPG, *RPGLE, *CLP etc.
ARGUMENT Up to 20 bytes to use in the scan and up to 20
arguments. This is the string that will be scanned
for. You may need to surround the value in quotes
and enter in upper case depending on the value. For
typical field names (e.g. ACCRCV), the value may be
entered in lower case without quotes. Trailing
blanks will be trimmed off.
MBR The member name. It defaults to *ALL for all
members in a file. A specific member may be named
or a generic name (e.g. PAY*). Scanning for a
generic name is similar to scanning for *ALL
members. All statements in the source file will be
read, but only the statements that belong to the
generic member name will be scanned.
TRANSLATE A *YES/*NO option that defaults to *NO. *YES causes
the source statement to be translated to upper case
before scanning for the argument.
ADDBLANKS The number of blanks to add to the end of the
argument before scanning.
0 is the default meaning the length of the data for
each argument determines what is scanned for.
A value in a range of 0 to 3 must be entered.
The intent of this parameter is to provide for the
situation such as when you want to scan for the end
of a name or word ending in 'red', but you do not
want words such as 'redeem'. Using ADDBLANKS(1)
finds any words such as 'altered' which are followed
by a blank.
CHGDAT The date to compare individual source statements to.
*NONE is the default meaning all source statements
A date may be entered in job format to compare to
the individual source statements change date
(positions 7-12) of a source statement. If the
source statement was changed on or after the
specified CHGDAT, it will be considered for listing.
Specifying a CHGDAT value can reduce the number of
print lines that must be reviewed.
SELCOL6 Whether to select only certain source records based
on the value of column 6 of the source data portion
of the record. The default is *ANY meaning that
column 6 is not considered and the entire data
portion of the record is scanned.
This option is designed for RPG/RPGLE to allow
selection of the type of specification such as I, D,
C, etc. For example, if C is entered, only
statements with a C in column 6 of the source data
will be scanned. Note that this may include some
array and table data.
A value should only be entered when you are limiting
the scan to RPG/RPGLE source types. The scan which
occurs is not sensitive to the source type and would
probably provide misleading information if a non-RPG
type of source was scanned.
FIRSTFOUND A *YES/*NO option that defaults to *NO. *NO means
that all members will be scanned and all statements.
*YES means that the command will end on the first
statement that matches the argument. Only the
matching statement will be printed. The PRTFOLSTM
option is ignored.
*YES may not be specified when the OUTLIB parameter
PRTFOLSTM A number or *YES/*NO option that defaults to *NO.
*NO causes only the statements where a hit was found
to be listed.
*YES means that if a hit is found on a statement,
the next statement will be printed whether it has a
hit or not. A number may be entered to cause the
next 1-9 statements to be listed. A value of 1 or
*YES have the same meaning.
The purpose of the option is for a situation such as
when you are scanning for a command name and want to
determine the additional lines of the same command
or some following commands. If you are interested
in the use of a specific keyword on a command, use
the SCNCMDKWD command.
If *YES or a number is specified, it does not cause
the record following a hit to be added to the
outfile if one has been requested.
SPCAFT The number of spaces 'print after'. The default it
1. 2 or 3 may also be specified.
The intent of requesting more than a single space
after is when you want to write on the listing and
need more white space.
PRTMBRTXT A *YES/*NO option that determines if the member text
is listed before any detail lines.
*NO is the default to list only the member name with
*YES means the member text appears once for each
member where a hit is found and precedes any detail
NOTFOUND A *YES/*NO option that defaults to *NO. *NO means
that if whether arguments are found or not, a
completion message is sent and a spooled file will
*YES means that if no arguments are found, the
escape message TAA9897 will be sent and no spooled
file will exist. The intent of *YES is when you are
scanning for a 'not equal' condition and want to
bypass all the members that match the argument.
OUTLIB The library in which the file SCNSRCP will be
placed. The file will contain one record for each
detail print line. The default is *NONE meaning no
outfile is created. *LIBL or *CURLIB may be entered
if the SCNSRCP exists. If the SCNSRCP file does not
exist, a library must be specified.
OUTMBR The member of the SCNSRCP file to be used. If the
member does not exist, it is added. The default is
REPLACE A *YES/*NO value for whether the member should be
cleared before writing records into it. The default
STSMSG A *PRG/*YES/*NO option that determines if a status
message is sent during the scan.
*PRG will cause a progress bar message to be sent if
all members are being processed.
*YES sends a status message as follows: 1) If all
members of a file are scanned, one status message
for the file is sent 2) If a single member is
scanned, a status message is sent with the member
*NO may be specified to prevent any status messages
SPLOPT A hidden parameter that determines whether a single
spooled file will be created on each call to the RPG
processing program. *NORMAL is the default to
provide one spooled file. In the case where all
members are scanned, an Override command specifies
MBR(*ALL) so there is only a single call to the RPG
program per file.
*DETAIL may be specified when individual members
within a source file should be scanned, but the
output is required in a single spooled file. SCNSRC
will be used multiple times per source file.
*CLOSE should be specified when after using *DETAIL,
the printer file should be closed (when all members
from the same file have been processed). *CLOSE
causes the final totals to be printed, but no member
*HITONL (hits only) should be specified when only
specific members are to be searched (such as by
source type) and a spooled file should only be
output when a member is found to contain the
argument. The spooled file is not opened if 'no
SPCNAME The special name that prints at the top of the page
for the case where SPLOPT(*DETAIL) is specified.
This allows a generic name to print at the top.
The file name that is output is SCNSRCP.
The model file used is TAASRCFP with a format name of SCNSRCR.
To see the field names used:
The value to be scanned for cannot span a source record.
The following TAA Tools must be on your system:
CHKGENERC Check generic
EDTVAR Edit variable
HLRMVMSG HLL Remove message
SNDCOMPMSG Send completion message
SNDESCMSG Send escape message
SNDSTSMSG Send status message
None, the tool is ready to use.
Objects used by the tool
Object Type Attribute Src member Src file
------ ----- --------- ---------- -----------
SCNSRC *CMD TAASRCF QATTCMD
TAASRCFP *FILE PF TAASRCFP QATTDDS
TAASRCFC *PGM CLP TAASRCFC QATTCL
TAASRCFC2 *PGM CLP TAASRCFC2 QATTCL
TAASRCFR *PGM RPG TAASRCFR QATTRPG
TAASRCFR2 *PGM RPG TAASRCFR2 QATTRPG