Operating System - OpenVMS
cancel
Showing results for 
Search instead for 
Did you mean: 

DCL syntax - symbol substitution - DCL_CHECK.COM warning

 
SOLVED
Go to solution
Art Wiens
Respected Contributor

DCL syntax - symbol substitution - DCL_CHECK.COM warning

I thought I'ld try the much heralded DCL_CHECK.COM procedure on some of the command procedures I've written. I get this message on something that I thought was correct:

LINE CODE --DIAGNOSTIC MESSAGE--
108 PRQ probable error using single-quote (')

It comes about when I set a local string symbol with:

$ SEARCH_WAIT_TIME := "00:03:00"

and use it later with:

$ WAIT 'SEARCH_WAIT_TIME

It definately works, it's been in use every 3 minutes for about a year.

Is it "wrong"?

Art
19 REPLIES
Uwe Zessin
Honored Contributor
Solution

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

I think the correct way is to surround the symbol:

$ WAIT 'SEARCH_WAIT_TIME'

Sometimes it is possible to leave off quotes like in (no '"' at the end):

$ write sys$output "bla
bla
$
.
Keith Cayemberg
Trusted Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

Hi Art,

well, I suppose if it works for you it's not totally wrong. I tried it and appears DCL is discarding your extra set of quotes...

$ SEARCH_WAIT_TIME := "00:03:00"
$ show symbol SEARCH_WAIT_TIME
SEARCH_WAIT_TIME = "00:03:00"

Correct form with the := and :== operators is to not use explicit quotes since all text to the right of the operator is already implicitly quoted...

$ SEARCH_WAIT_TIME := 00:03:00
$ show symbol SEARCH_WAIT_TIME
SEARCH_WAIT_TIME = "00:03:00"

Or, you could use the = or == operators which do not perform implicit quoting. Then it would be correct form to include explicit quotes.

$ show symbol SEARCH_WAIT_TIME
$ SEARCH_WAIT_TIME = "00:03:00"

I'm not sure if your method could result in substitution problems or limitations if the quoting and symbol substitution were signicantly more complicated than your example.

I was using...
$ show system/noproc
OpenVMS V7.3-2 on node CH21 27-SEP-2004 20:19:28.73 Uptime 28 07:04:01


Cheers!

Keith Cayemberg
Keith Cayemberg
Consultant
Wipro Technologies
Keith Cayemberg
Trusted Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

Ah, Yes. Uwe is correct. I was looking in the wrong place. The DCL_CHECK was definitely complaining about the unbalanced single quoting of the WAIT command substitution. Yes it works often. But it's bad form, and unsupported. Here, I believe there are cases where you can also get yourself in trouble.

Cheers!

Keith
Keith Cayemberg
Consultant
Wipro Technologies
Wim Van den Wyngaert
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

DCL_CHECK is not a compiler. It TRIES to understand what is in the dcl procedure.
It is possible to write scripts that are 100% warning free but sometimes you have to find a warning free syntax. E.g. goto's to a value of a symbol are hard to understand. E.g. symbol substitution. E.g. label formats (balnks before :).

Today I posted a dcl_check in zhich I cleaned out some of the messages that I found redundant (for me).

Wim
Wim
Art Wiens
Respected Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

I've been re-reading "Writing Real Programs in DCL 2nd Edition" by Paul Anagnostopolous and Steve Hoffman ... Chapter 5 - page 66 :

"The "official" syntax for sustitution calls for one trailing apostrophe; however, it is unnecessary in many cases." ... and then goes on to list the specific situations where it is. My situation it's not.

Another good quote is on page 68:

"Programmers are often confused about the context in which apostrophe substitution is required, and this results in overuse of the construct."

Just trying to live "by the book".

Thanks,
Art
Wim Van den Wyngaert
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

Art,

I use 2 methods only (risk ?)
1) "''symbol'"
2) 'symbol'

Format 2 has no discussion of where the symbol ends. Why use the 'symbol ?

Of couse, dcl_check should recognize al formats but I think the author was convinced that my/his formats are the real ones.

Wim
Wim
Art Wiens
Respected Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

"Why use the 'symbol "

'Cause if Steve Hoffman tells me it's unneccesary, I should probably listen!

;-)
Art
Ian Miller.
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

the trailing quote is unecessary for the correct execution of the DCL but so are comments :-)
I think the DCL_CHECK author is suggesting its better style always to including for those occations when it is necessary.
____________________
Purely Personal Opinion
Sheldon Smith
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

A DCL symbol is limited to alphanumerics, dollar, hyphen and underscore. While the trailing apostrophe/single quote may be esthetically better (read "balanced"), when followed by whitespace it is definitely optional.

Note: While I work for Hewlett Packard Enterprise, all of my comments (whether noted or not), are my own and are not any official representation of the company.
----------
If my post was useful, click on my KUDOS! thumb below!
Ian Miller.
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

I think the quote from the book is saying that people often but quotes in when no quotes are needed. It also says that MOST of the time the trailing quote is not needed but sometimes it is. The author of DCL_CHECK and others here are suggesting that when you use the quote then always put both quotes for consitency and the rare case that both are needed.
____________________
Purely Personal Opinion
Jan van den Ende
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

Or, put in another way:
CHECK_DCL does not only check syntax per se,
but also checks for adherance to (some form of?) good practise.

In line therewith, just for my curiosity:
how about a check for consistent usage of indentation? Equally, or maybe even more interesting for humans who may have to work with the DCL's as well.

Cheers.

Have one on me

Jan
Don't rust yours pelled jacker to fine doll missed aches.
Art Wiens
Respected Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

"The author of DCL_CHECK and others here are suggesting that when you use the quote then always put both quotes for consitency and the rare case that both are needed."

I can't find the reference right now, but there's another place where that's definately not the case and they are suggesting the exact opposite


"how about a check for consistent usage of indentation? "

That's a great subject to cause a thread to continue forever!! ;-)

Personally I find it very annoying to have line labels right next to the $ sign eg: $loop: Why not leave a space? When it's white text on a black screen at 132 col's (and your in your 40's) it gets a little blurry!

How about case? All upper, all lower, or a mix of commands upper, variables, symbols etc. lower? Make it look like a language and "camelback" it ie. $ LoopAgain:

Art
Jan van den Ende
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

Art,

I DID NOT specify WHAT indentation, only CONSISTENT USE.

In my view that should mean:

If you start with label names having n (0=
If you start indenting your if-then-else constructs with m (1=
Especially the latter one would be a REAL help in debugging, especially in the case where different persons with personal styles have made changes some time in the past.

THAT, and only that, was my intention.

Cheers!

Have one on me.

Jan
Don't rust yours pelled jacker to fine doll missed aches.
Wim Van den Wyngaert
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

I have written some simple DCL stuff to check if-then-else indentations.
All if-then-else statements must have their words alligned. Badly alligned scripts are unreadable.

I had the same for COBOL but that one is more complicated (runs every night since 1995 in a site were I worked). It also checked ifs with included statements against a maximum length. And much more.

Wim
Wim
Wim Van den Wyngaert
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

If Jan could pay per Internet he would be broke.
Jan : have a lot (nen bak) on me !

Wim
Wim
Guinaudeau
Frequent Advisor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

another question around symbol substitution :

has anyone an idea how could one insert in a string symbol an apostrophe ? i looked at Anagnostopoulos book.

Basically, it would be probably OK when i could defined a string of one char containing "'" and use a substring assignment as in Anagnostopoulos page 43, but DCL attempts a symbol substitution on it.

Thanks for any help

Louis
Robert Gezelter
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

Guinaudeau,

You can assign an apostrophe to a symbol by using the escape convention (doubling the character):

$ STRING = "''''"
$ WRITE SYS$ERROR STRING

Admittedly, the doubling rule is one of the more often confusing parts of DCL syntax.

- Bob Gezelter, http://www.rlgsc.com

Jan van den Ende
Honored Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning


and ANY character ( well, except %X0 ), most notably escape sequences, can be made by numeric assignment of the ASCII value.
eg:
$ esc[0,8]=27
(8 bits of the symbol "esc" get ASCII vaule 27, so ESC is the Escape character.
Look up any 8-bit character you need, and it works.
$ eur[0,8]=128 gives the Euro sign on the printer.
I can not look it up now, and I always confuse double-quote ans apostrophe, but one is 41 and the other 43.

Proost.

Have one on me.

jpe


Don't rust yours pelled jacker to fine doll missed aches.
Lawrence Czlapinski
Trusted Contributor

Re: DCL syntax - symbol substitution - DCL_CHECK.COM warning

Guinaudeau: If you actually want a single quote character enclose it in a pair of double quotes.
CONSHY» string ="I can't."
CONSHY» write sys$output string
I can't.
Lawr