Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.os.vms    |    DEC's VAX* line of computers & VMS.    |    264,096 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 262,384 of 264,096    |
|    Mark Berryman to All    |
|    Re: Local Versus Global Command Options     |
|    15 Feb 25 12:22:59    |
   
   From: mark@theberrymans.com   
      
   On 2/14/25 6:02 PM, Arne Vajhøj wrote:   
   > On 2/14/2025 6:49 PM, Arne Vajhøj wrote:   
   >> On 2/14/2025 2:02 PM, Simon Clubley wrote:   
   >>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â    
    Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â It also   
   >>> doesn't help you with the main problem I mentioned, which is parsing   
   >>> and validating the filter syntax.   
   >>   
   >>> How would you turn the list of filters, each with their own syntax, into   
   >>> something that can be validated by DCL ? As a reminder, it is critical   
   >>> that the filters are available to the program in the order they were   
   >>> specified on the command line.   
   >>   
   >> I think that can be define in CLD.   
   >>   
   >> $ type fun4.cld   
   >> define verb fun4   
   >> Â Â Â Â image "sys$disk:[]fun4"   
   >> Â Â Â Â parameter p1, value(type=$file, list, required)   
   >> qualifier filter, value(type=filter_type, list, required),   
   >> placement=local   
   >> define type filter_type   
   >> Â Â Â Â keyword filtera, value(type=filtera_type, list, required)   
   >> Â Â Â Â keyword filterb, value(type=filterb_type, list, required)   
   >> define type filtera_type   
   >> Â Â Â Â keyword a1, value(type=$number, required)   
   >> Â Â Â Â keyword a2, value(type=$number, required)   
   >> Â Â Â Â keyword x, value(type=$number, required)   
   >> define type filterb_type   
   >> Â Â Â Â keyword b1, value(type=$number, required)   
   >> Â Â Â Â keyword b2, value(type=$number, required)   
   >> Â Â Â Â keyword x, value(type=$number, required)   
   >> $ type fun4.pas   
   >> [inherit('sys$library:pascal$cli_routines')]   
   >> program fun4(input,output);   
   >>   
   >> type   
   >> Â Â Â pstr = varying [255] of char;   
   >> Â Â Â filter_type = (filtera, filterb);   
   >>   
   >> var   
   >> Â Â Â filter_list : array [1..100] of filter_type;   
   >> Â Â Â fnm, filter, a1, a2, b1, b2, x : pstr;   
   >> Â Â Â nfilters, i : integer;   
   >>   
   >> begin   
   >> Â Â Â while odd(cli$get_value('P1', fnm.body, fnm.length)) do begin   
   >> Â Â Â Â Â Â write(fnm);   
   >> Â Â Â Â Â Â nfilters := 0;   
   >> Â Â Â Â Â Â while odd(cli$get_value('FILTER', filter.body, filter.length))   
   >> do begin   
   >> Â Â Â Â Â Â Â Â Â nfilters := nfilters + 1;   
   >> Â Â Â Â Â Â Â Â Â if index(filter, 'FILTERA') = 1 then   
   >> Â Â Â Â Â Â Â Â Â Â Â Â filter_list[nfilters] := filtera   
   >> Â Â Â Â Â Â Â Â Â else if index(filter, 'FILTERB') = 1 then   
   >> Â Â Â Â Â Â Â Â Â Â Â Â filter_list[nfilters] := filterb   
   >> Â Â Â Â Â Â Â Â Â else   
   >> Â Â Â Â Â Â Â Â Â Â Â Â halt;   
   >> Â Â Â Â Â Â end;   
   >> Â Â Â Â Â Â for i := 1 to nfilters do begin   
   >> Â Â Â Â Â Â Â Â Â write(' ', filter_list[i]);   
   >> Â Â Â Â Â Â Â Â Â case filter_list[i] of   
   >> Â Â Â Â Â Â Â Â Â Â Â Â filtera:   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â begin   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â write(' filtera');   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â cli$get_value('FILTERA.A1', a1.body,   
   a1.length);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â write(' a1=', a1);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â cli$get_value('FILTERA.A2', a2.body,   
   a2.length);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â write(' a2=', a2);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â cli$get_value('FILTERA.X', x.body,   
   x.length);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â write(' x=', x);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â end;   
   >> Â Â Â Â Â Â Â Â Â Â Â Â filterb:   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â begin   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â write(' filterb');   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â cli$get_value('FILTERB.B1', b1.body,   
   b1.length);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â write(' b1=', b1);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â cli$get_value('FILTERB.B2', b2.body,   
   b2.length);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â write(' b2=', b2);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â cli$get_value('FILTERB.X', x.body,   
   x.length);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â write(' x=', x);   
   >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â end;   
   >> Â Â Â Â Â Â Â Â Â end;   
   >> Â Â Â Â Â Â end;   
   >> Â Â Â Â Â Â writeln;   
   >> Â Â Â end;   
   >> end.   
   >> $ pas fun4   
   >> $ lin fun4   
   >> $ set comm fun4   
   >> $ fun4 f1.dat/   
   >> filter=(filtera=(a1:12,a2:34,x:1234),filterb=(b1:56,b2:78,x:5678)),-   
   >>   
   >> f2.dat/filter=(filterb=(b2:87,b1:65,x:8765),filtera=(a2:43,a1:21,x:4321))   
   >> f1.dat FILTERA filtera a1=12 a2=34 x=1234 FILTERB filterb b1=56   
   >> b2=78 x=5678   
   >> f2.dat FILTERB filterb b1=65 b2=87 x=8765 FILTERA filtera a1=21   
   >> a2=43 x=4321   
   >   
   > But I like this version better:   
   >   
   > $ type fun5.cld   
   > define verb fun5   
   > Â Â Â image "sys$disk:[]fun5"   
   > Â Â Â parameter p1, value(type=$file, list, required)   
   > qualifier filter, value(type=$quoted_string, list, required),   
   > placement=local   
   > $ type fun5sup.cld   
   > module fun5sup   
   > define verb fa   
   > Â Â Â qualifier a1, value(type=$number, required)   
   > Â Â Â qualifier a2, value(type=$number, required)   
   > Â Â Â qualifier x, value(type=$number, required)   
   > define verb fb   
   > Â Â Â qualifier b1, value(type=$number, required)   
   > Â Â Â qualifier b2, value(type=$number, required)   
   > Â Â Â qualifier x, value(type=$number, required)   
   > $ type fun5.pas   
   > [inherit('sys$library:pascal$cli_routines')]   
   > program fun5(input,output);   
   >   
   > type   
   > Â Â pstr = varying [255] of char;   
   > Â Â finfo = record   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â fnm : pstr;   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â nfilter : integer;   
   > Â Â Â Â Â Â Â Â Â Â Â Â Â filter_list : array [1..100] of pstr;   
   > Â Â Â Â Â Â Â Â Â Â end;   
   >   
   > var   
   > Â Â fun5sup : [external] integer;   
   >   
   > var   
   > Â Â finfo_list : array [1..100] of finfo;   
   > Â Â fnm, filter, a1, a2, b1, b2, x : pstr;   
   > Â Â n, i, j : integer;   
   >   
   > begin   
   > Â Â n := 0;   
   > Â Â while odd(cli$get_value('P1', fnm.body, fnm.length)) do begin   
   > Â Â Â Â Â n := n + 1;   
   > Â Â Â Â Â finfo_list[n].fnm := fnm;   
   > Â Â Â Â Â finfo_list[n].nfilter := 0;   
   > Â Â Â Â Â while odd(cli$get_value('FILTER', filter.body, filter.length)) do   
   > begin   
   > Â Â Â Â Â Â Â Â finfo_list[n].nfilter := finfo_list[n].nfilter + 1;   
   > Â Â Â Â Â Â Â Â finfo_list[n].filter_list[finfo_list[n].nfilter] :=   
   > substr(filter, 2, length(filter) - 2);   
   > Â Â Â Â Â end;   
   > Â Â end;   
   > Â Â for i := 1 to n do begin   
   > Â Â Â Â Â write(finfo_list[i].fnm);   
   > Â Â Â Â Â for j := 1 to finfo_list[i].nfilter do begin   
   > Â Â Â Â Â Â Â Â cli$dcl_parse(finfo_list[i].filter_list[j], fun5sup);   
   > Â Â Â Â Â Â Â Â if index(finfo_list[i].filter_list[j], 'fa') = 1 then begin   
   > Â Â Â Â Â Â Â Â Â Â Â write(' fa');   
   > Â Â Â Â Â Â Â Â Â Â Â cli$get_value('A1', a1.body, a1.length);   
   > Â Â Â Â Â Â Â Â Â Â Â write(' a1=', a1);   
   > Â Â Â Â Â Â Â Â Â Â Â cli$get_value('A2', a2.body, a2.length);   
   > Â Â Â Â Â Â Â Â Â Â Â write(' a2=', a2);   
   > Â Â Â Â Â Â Â Â Â Â Â cli$get_value('X', x.body, x.length);   
   > Â Â Â Â Â Â Â Â Â Â Â write(' x=', x);   
      
   [continued in next message]   
      
   --- SoupGate-DOS v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca