| Interesting one; and just to add to the confusion, the problem exists
with SYS$... symbols as well.
Well, for what it's worth, here's the problem. (For those that don't
care, it's in the BLISS code, and won't be fixable without a patch; so you'll
have to live with it.)
There's an internal routine called OA$SYM_EXAMINE_SYM that generates
the output that you see when you do an EXAMINE (SYM=...). This routine walks
through all symbol tables -- local symbols, permanent symbols, special symbols,
etc., and tries to match each name against the "filter" provided.
There's one *big* difference between the "permanent" symbol tables
(i.e., user .PST and SYS$... symbols) and all of the rest kept in memory. And
that is that the in-memory symbols are kept in tabular form, with a name and a
value. The permanent symbols, on the other hand, are stored as records within
RMS ISAM files, where *part* of the record is the symbol name, and *part* of
the record is its value.
The way that the EXAMINE function works is to process every element
from every table. It takes its "name", and matches it against the filter given.
Unfortunately, when the routine walks through the user .PST and the system .PST,
it forgets that only *part* of the record is the symbol name. It's actually
doing a match against the *entire record*!
So if $TEST1 has a value of "ABC", and $TEST2 has a value of "XYZ",
and the EXAMINE function is trying to match $TEST%, it never sees any records
that consist of *only* "$TEST" and *one single character* following! However,
that is also why using the "*" wildcard (i.e., *whatever* characters follow)
works!
[Note to IOSG: The problem needs to be corrected in two places -- in
the sections of code that process the two permanent symbol tables. In each
case, fter the OA$IO_GET from the PST_RAB, you'll need to parse off *just* the
symbol name -- i.e., strip the "value" portion -- before doing the match.]
|