[Info-vax] Very simple DCL question

VAXman- at SendSpamHere.ORG VAXman- at SendSpamHere.ORG
Wed Dec 28 22:49:42 EST 2022


In article <toisqe$p0r$1 at gioia.aioe.org>, =?UTF-8?Q?Arne_Vajh=c3=b8j?= <arne at vajhoej.dk> writes:
>On 12/28/2022 3:39 PM, Arne Vajhøj wrote:
>> On 12/28/2022 3:07 PM, Craig A. Berry wrote:
>>>>> On 28/12/2022 16:45, Arne Vajhøj wrote:
>>>>>> $ type z.com
>>>>>> $ write sys$output "''p1'"
>>>>>> $ @z a
>>>>>> A
>>>>>> $ @z "a"
>>>>>> a
>>>>>>
>>>>>> This is not really surprising.
>>>>>>
>>>>>> But are there any way to preserve pn case without
>>>>>> double-quoting it?
>>>>>>
>>>>>> Like this hypothetical syntax:
>>>>>>
>>>>>> $ set proc/parse=(extended,pnkeepcase)
>> 
>>> Case sensitivity doesn't really have anything to do with case
>>> preservation.  I don't know of any way to do what Arne wants here except
>>> to avoid DCL.  Write a C program (or use something written in C, such as
>>> Perl or Python, instead of DCL) and set extended parse in the process
>>> and DECC$ARGV_PARSE_STYLE in the environment before running the C 
>>> program.
>> 
>> :-(
>> 
>> But thanks.
>
>I will use the double quotes.
>
>But just for fun:
>
>$ type zz.com
>$ write sys$output "''p1' ''p2' ''p3'"
>$ run realp
>$ write sys$output "''p1' ''p2' ''p3'"
>$ @zz aaaa BBBB CcCc
>AAAA BBBB CCCC
>aaaa BBBB CcCc
>
>But there is a gazillion things that can go wrong with that
>realp.
>
>Code below.
>
>Arne
>
>
>
>         .title  realp
>         $SSDEF
>         $DSCDEF
>         .macro  if_end_command,lbl
>         cmpl    r3,r4
>         bgeq    lbl
>         .endm
>         .macro  if_space,lbl
>         cmpb    (r3),#32
>         beql    lbl
>         .endm
>         .psect  $LOCAL quad,pic,con,lcl,noshr,noexe,wrt
>cmdlen: .blkw   1
>cmdbuf: .blkb   256
>pnam:   .ascid  "P1"
>pval:   .blkw   1
>         .byte   DSC$K_DTYPE_T
>         .byte   DSC$K_CLASS_S
>         .address pvala
>pvala:  .blkb   256
>         .psect  $CODE quad,pic,con,lcl,shr,exe,nowrt
>         .entry  realp,^m<r2,r3,r4,r5>
>; grab copy of command line
>         movl    #CTL$AG_CLIDATA,r0
>         movl    W^PPD$L_PRC(r0),r0
>         movl    W^PRC_L_RECALLPTR(r0),r0 ; r0 = next command
>         subl2   #2,r0
>         cvtwl   (r0),r1                 ; r1 = length current command
>         subl2   r1,r0                   ; r0 = current command
>         movw    r1,cmdlen               ; copy of length of command line
>         movc3   r1,(r0),cmdbuf          ; copy of command line
>         movab   cmdbuf,r3               ; r3 = current character on 
>command line
>         cvtwl   cmdlen,r1
>         addl3   r1,r3,r4                ; r4 = end of command line
>; skip command itself
>100$:   if_end_command done
>         if_space start
>         incl    r3                      ; move to next character
>         brb     100$
>; process parameters
>start:  incl    r3                      ; r3 = start first argument
>         movl    #1,r2                   ; r2 = n = 1
>200$:   if_end_command done
>         movw    #0,pval                 ; reset parameter data
>         movab   pvala,r5                ; r5 = where to copy parameter data
>300$:   if_end_command 500$
>         if_space 400$
>         incw    pval                    ; add to pval/pvala
>         movb    (r3),(r5)
>         incl    r3
>         incl    r5
>         brb     300$
>400$:   incl    r3                      ; skip space between parameters
>500$:   pushl   #0
>         pushab  pval
>         pushab  pnam
>         calls   #3,G^LIB$SET_SYMBOL
>         incb    pnam+9                  ; Pn -> Pn+1
>         incl    r2                      ; n = n + 1
>         cmpl    r2,#8                   ; while n <= 8
>         bleq    200$
>done:   movl    #SS$_NORMAL,r0
>         ret
>         .end    realp

Good grief!  I needed an airsick bag and bottle of Tums after reading that.

-- 
VAXman- A Bored Certified VMS Kernel Mode Hacker    VAXman(at)TMESIS(dot)ORG

I speak to machines with the voice of humanity.



More information about the Info-vax mailing list