[Info-vax] Example of random access by record number on an RMS fixed record size, relative organization file?

Arne Vajhøj arne at vajhoej.dk
Thu Sep 21 20:35:45 EDT 2023


On 9/19/2023 8:44 PM, Arne Vajhøj wrote:
> On 9/16/2023 4:16 PM, Arne Vajhøj wrote:
>> I don't think I have ever used ORG=REL.
> 
> But then I could start now!

Macro-32 (I know some Macro-32 code has already been posted):

$ type relwrt.mar
         .title  relwrt
         $DSCDEF
         $FABDEF
         $RABDEF
         $RMSDEF
         .psect  $PDATA quad,pic,con,lcl,shr,noexe,nowrt
fnm:    .ascii  "rel.dat"
endfnm:
dir:    .ascid  "This is line #!4ZL!!"
         .psect  $LOCAL quad,pic,con,lcl,noshr,noexe,wrt
myfab:  $FAB 
fna=fnm,fns=endfnm-fnm,org=rel,rfm=var,fop=cif,mrs=512,fac=put
myrab:  $RAB    fab=myfab,rac=key
key:    .blkl   1
buf:    .ascid  "This is line #nnnn!"
endbuf:
         .psect  $CODE quad,pic,con,lcl,shr,exe,nowrt
         .entry  relwrt,^m<r2>
         $create fab=myfab
         $connect rab=myrab
         movl    #1,r2
100$:   $FAO_S  ctrstr=dir,outlen=buf+dsc$w_length,outbuf=buf,p1=r2
         movl    r2,key
         moval   key,myrab+rab$l_kbf
         movb    #4,myrab+rab$b_ksz
         movl    buf+dsc$a_pointer,myrab+rab$l_rbf
         movw    buf+dsc$w_length,myrab+rab$w_rsz
         $put    rab=myrab
         incl    r2
         cmpl    r2,#100
         bleq    100$
         $disconnect rab=myrab
         $close  fab=myfab
         ret
         .end    relwrt
$ mac relwrt
$ link relwrt
$ run relwrt
$ type relrdseq.mar
         .title  relrdseq
         $DSCDEF
         $FABDEF
         $RABDEF
         $RMSDEF
         .psect  $PDATA quad,pic,con,lcl,shr,noexe,nowrt
fnm:    .ascii  "rel.dat"
endfnm:
         .psect  $LOCAL quad,pic,con,lcl,noshr,noexe,wrt
myfab:  $FAB    fna=fnm,fns=endfnm-fnm,org=rel,rfm=var,mrs=512,fac=get
myrab:  $RAB    fab=myfab,rac=seq
buf:    .ascid  "                                        "
endbuf:
         .psect  $CODE quad,pic,con,lcl,shr,exe,nowrt
         .entry  relrdseq,^m<r3,r4>
         $open   fab=myfab
         $connect rab=myrab
100$:   movl    buf+dsc$a_pointer,myrab+rab$l_ubf
         movw    buf+dsc$w_length,myrab+rab$w_usz
         incl    myrab+rab$l_ubf
         decw    myrab+rab$w_usz
         $get    rab=myrab
         cmpl    r0,#RMS$_NORMAL
         bneq    200$
         movl    buf+dsc$a_pointer,r3
         movb    #124,(r3)
         addw2   myrab+rab$w_rsz,r3
         movb    #124,(r3)
         movw    buf+dsc$w_length,r4
         addw3   #2,myrab+rab$w_rsz,buf+dsc$w_length
         pushab  buf
         calls   #1,G^LIB$PUT_OUTPUT
         movw    r4,buf+dsc$w_length
         brb     100$
200$:   $disconnect rab=myrab
         $close  fab=myfab
         ret
         .end    relrdseq
$ mac relrdseq
$ link relrdseq
$ run relrdseq
|This is line #0001|
|This is line #0002|
...
|This is line #0100|
$ type relrddir.mar
         .title  relrddir
         $DSCDEF
         $FABDEF
         $RABDEF
         $RMSDEF
         .psect  $PDATA quad,pic,con,lcl,shr,noexe,nowrt
fnm:    .ascii  "rel.dat"
endfnm:
         .psect  $LOCAL quad,pic,con,lcl,noshr,noexe,wrt
myfab:  $FAB    fna=fnm,fns=endfnm-fnm,org=rel,rfm=var,mrs=512,fac=get
myrab:  $RAB    fab=myfab,rac=key
key:    .blkl   1
buf:    .ascid  "                                        "
endbuf:
         .psect  $CODE quad,pic,con,lcl,shr,exe,nowrt
         .entry  relrddir,^m<r2,r3,r4>
         $open   fab=myfab
         $connect rab=myrab
         movl    #1,r2
100$:   movl    r2,key
         moval   key,myrab+rab$l_kbf
         movb    #4,myrab+rab$b_ksz
         movl    buf+dsc$a_pointer,myrab+rab$l_ubf
         movw    buf+dsc$w_length,myrab+rab$w_usz
         incl    myrab+rab$l_ubf
         decw    myrab+rab$w_usz
         $get    rab=myrab
         movl    buf+dsc$a_pointer,r3
         movb    #124,(r3)
         addw2   myrab+rab$w_rsz,r3
         movb    #124,(r3)
         movw    buf+dsc$w_length,r4
         addw3   #2,myrab+rab$w_rsz,buf+dsc$w_length
         pushab  buf
         calls   #1,G^LIB$PUT_OUTPUT
         movw    r4,buf+dsc$w_length
         incl    r2
         cmpl    r2,#100
         bleq    100$
         $disconnect rab=myrab
         $close  fab=myfab
         ret
         .end    relrddir
$ mac relrddir
$ link relrddir
$ run relrddir
|This is line #0001|
|This is line #0002|
...
|This is line #0100|

Arne






More information about the Info-vax mailing list