[Info-vax] Very simple DCL question

Chris Townley news at cct-net.co.uk
Sat Dec 31 18:30:26 EST 2022


On 31/12/2022 21:03, Arne Vajhøj wrote:
> On 12/28/2022 9:58 PM, Arne Vajhøj wrote:
>> On 12/28/2022 10:49 PM, VAXman- at SendSpamHere.ORG wrote:
>>> In article <toisqe$p0r$1 at gioia.aioe.org>, 
>>> =?UTF-8?Q?Arne_Vajh=c3=b8j?= <arne at vajhoej.dk> writes:
> [Macro-32 omitted]
>>> Good grief!  I needed an airsick bag and bottle of Tums after reading 
>>> that.
>>
>> That bad? Hmmm.
> 
> You will probably not like the zweiter sehr verbesserte ausgabe either.
> 
>          .title  realp
>          $SSDEF
>          $DSCDEF
> SPACE=32
> PRC_C_CMDBUFSIZ=4097 ; 1025 on VAX
> PRC$W_PROCLEVEL=56
>          .macro  if_end_command,lbl
>          cmpl    r3,r4
>          bgeq    lbl
>          .endm
>          .macro  if_space,lbl
>          cmpb    (r3),#SPACE
>          beql    lbl
>          .endm
>          .psect  $PDATA quad,pic,con,lcl,shr,noexe,nowrt
> nomsg:  .ascid  "This is not run from first level COM file so no action 
> taken"
>          .psect  $LOCAL quad,pic,con,lcl,noshr,noexe,wrt
> copy1:  .blkb   PRC_C_CMDBUFSIZ
> copy2:  .blkb   PRC_C_CMDBUFSIZ
> 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,r6>
> ; phase 1 : grab copy of recall buffer
> ;   out  r0 = command length
> ;   out  r1 = command address
> ;   temp r2 & r3 for working storage
> ;   temp r6 = pointer recall buffer P1 space
>          movl    #CTL$AG_CLIDATA,r6
>          movl    W^PPD$L_PRC(r6),r6
>          cmpw    W^PRC$W_PROCLEVEL(r6),#1 ; test if run from first level 
> COM file
>          bneq    nogood
>          movc3   #PRC_C_CMDBUFSIZ,W^PRC_G_COMMANDS(r6),copy1 ; make two 
> copies of data to handle circular buffer
>          movc3   #PRC_C_CMDBUFSIZ,W^PRC_G_COMMANDS(r6),copy2
>          movab   W^PRC_G_COMMANDS(r6),r2 ; find address next command
>          movl    W^PRC_L_RECALLPTR(r6),r3
>          subl3   r2,r3,r1
>          movab   copy2,r6
>          addl2   r6,r1
>          subl2   #2,r1                   ; find length current command
>          cvtwl   (r1),r0
>          subl2   r0,r1                   ; find address current command
> ; phase 2 : parse
> ;   in   r0 = command length
> ;   in   r1 = command address
> ;   temp r2 = parameter number
> ;   temp r3 = current character in command
> ;   temp r4 = end of command
> ;   temp r5 = current Pn output character
>          movl    r1,r3                   ; current character = first 
> character
>          addl3   r0,r3,r4                ; find end of command
> ; skip command itself
> 100$:   if_end_command done
>          if_space start
>          incl    r3                      ; skip if not space
>          brb     100$
> ; process parameters
> start:  incl    r3                      ; skip space between command 
> itself and P1
>          movl    #1,r2                   ; n = 1
> 200$:   if_end_command done
>          movw    #0,pval                 ; reset parameter data
>          movab   pvala,r5
> 300$:   if_end_command 500$
>          if_space 400$
>          incw    pval                    ; add to parameter data
>          movb    (r3)+,(r5)+
>          brb     300$
> 400$:   incl    r3                      ; skip space between Pn and Pn+1
> 500$:   pushl   #0
>          pushab  pval                    ; set Pn symbol
>          pushab  pnam
>          calls   #3,G^LIB$SET_SYMBOL
>          incb    pnam+9                  ; update Pn -> Pn+1
>          incl    r2                      ; n = n + 1
>          cmpl    r2,#8                   ; while n <= 8
>          bleq    200$
>          brb     done
> ; message due to to not being run from first level COM file
> nogood: pushab  nomsg
>          calls   #1,G^LIB$PUT_OUTPUT
> ; all done
> done:   movl    #SS$_NORMAL,r0
>          ret
>          .end    realp
> 
> Arne
That reminds why I told the development manager, when being interviewed 
to join the programming team, that I would not do macro...

I still got the job!

Later when there was a problem with any of the macro, I just rewrote in 
a high level language


-- 
Chris




More information about the Info-vax mailing list