[Info-vax] Can DCL be enhanced to report why a qualifier is ambiguous ?

Arne Vajhøj arne at vajhoej.dk
Fri May 28 09:57:16 EDT 2021


On 5/27/2021 2:57 PM, Simon Clubley wrote:
> I've mentioned this before, but it would be really nice if DCL could
> be enhanced to list all the possible candidates in the error message
> if you enter an ambiguous keyword.

It must be in CLI$DCL_PARSE the magic should happen.

$ type pars1.cld
define verb pars
     image "sys$disk:[]pars1.exe"
     qualifier a1
     qualifier a2
$ type pars1.pas
[inherit('sys$library:pascal$cli_routines')]
program pars1(input, output);

begin
    if odd(cli$present('A1')) then writeln('A1') else writeln('not A1');
    if odd(cli$present('A2')) then writeln('A2') else writeln('not A2');
end.
$ pas pars1
$ link pars1
$ set command pars1
$ pars
not A1
not A2
$ pars /a1
A1
not A2
$ pars /a
%DCL-W-ABKEYW, ambiguous qualifier or keyword - supply more characters
  \A\
$ type pars2def.cld
module pars2def

define verb pars
     qualifier a1
     qualifier a2
$ type pars2.pas
[inherit('sys$library:pascal$lib_routines', 
'sys$library:pascal$cli_routines')]
program pars1(input, output);

var
    pars2def : [external] integer;

var
    args : varying[255] of char;

begin
    lib$get_foreign(args.body, 'Arguments: ', args.length);
    if odd( cli$dcl_parse('pars ' + args, pars2def)) then begin
       if odd(cli$present('A1')) then writeln('A1') else writeln('not A1');
       if odd(cli$present('A2')) then writeln('A2') else writeln('not A2');
    end;
end.
$ set command/object pars2def
$ pas pars2
$ link pars2 + pars2def
$ pars := $sys$disk:[]pars2
$ pars
not A1
not A2
$ pars /a1
A1
not A2
$ pars /a
%CLI-W-ABKEYW, ambiguous qualifier or keyword - supply more characters
  \A\
%TRACE-W-TRACEBACK, symbolic stack dump follows
   image    module    routine             line      rel PC           abs PC
                                             0 FFFFFFFF800833F8 
FFFFFFFF800833F8
  DCL                                                         ? 
        ?
                                             0 FFFFFFFF800833F8 
FFFFFFFF800833F8
  DCL                                                         ? 
        ?
                                             0 FFFFFFFF800833F8 
FFFFFFFF800833F8
  pars2                                      0 0000000000020644 
0000000000020644
  pars2  PARS1  PARS1                       12 000000000000012C 
000000000002012C
                                             0 FFFFFFFF80340964 
FFFFFFFF80340964
%TRACE-I-END, end of TRACE stack dump

Arne





More information about the Info-vax mailing list