[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