[Info-vax] 64-bit (was Re: New CEO of VMS Software)
Arne Vajhøj
arne at vajhoej.dk
Fri Jan 12 19:11:36 EST 2024
On 1/12/2024 6:46 PM, Dave Froble wrote:
> On 1/12/2024 3:22 PM, Arne Vajhøj wrote:
>> On 1/12/2024 2:57 PM, Dave Froble wrote:
>>> On 1/12/2024 7:23 AM, Arne Vajhøj wrote:
>>>> On 1/12/2024 12:08 AM, Dave Froble wrote:
>>>>> On 1/11/2024 3:48 PM, Arne Vajhøj wrote:
>>>>>> On 1/11/2024 1:17 PM, Simon Clubley wrote:
>>>>>>> On 2024-01-11, Dave Froble <davef at tsoft-inc.com> wrote:
>>>>>>>> If RMS doesn't fit your requirements, then don't use it.
>>>>>>>
>>>>>>> Everyone uses RMS, even if it hidden from you by the language.
>>>>>>> The RMS
>>>>>>> references are still in the executable you create however.
>>>>>>
>>>>>> In practice yes.
>>>>>>
>>>>>> In theory one can use SYS$QIO(W) for all IO and bypass RMS. But
>>>>>> it is very cumbersome (especially if one cannot use RMS for stuff
>>>>>> like finding IFI).
>>>>>
>>>>> And if one is using a database product that has nothing to do with
>>>>> RMS ???
>>>>
>>>> I would still expect that database product to use RMS to open
>>>> the database file even if the actual IO is done by
>>>> SYS$QIO(W) / SYS$IO_PERFORM(W) or via memory mapped file.
>>>
>>> Your expectation would be wrong.
>>
>> It happens frequently.
>>
>>> File opens without RMS use QIO to open a file.
>>
>> How does it get the FID?
>
> I'll post pieces of code to keep this short, well, relatively ..
> 300$: MOVAB WRK_QIO,R9 ; Set $QIO parameter block address
> MOVAQ WRK_Q_IOSB,QIO$_IOSB(R9) ; I/O status block
> MOVZWL WRK_W_VMSCHN,QIO$_CHAN(R9); Set VMS channel number
> MOVZWL #<IO$_ACCESS!IO$M_ACCESS>,QIO$_FUNC(R9)
> MOVAQ WRK_Q_FIBDSC,QIO$_P1(R9) ; FIB descriptor address
> MOVAQ WRK_Q_FILDSC,QIO$_P2(R9) ; Filename
> specification descrip
> tor address
> CLRQ QIO$_P3(R9) ; Clear (p3,p4)
> MOVAB WRK_ATRLST,QIO$_P5(R9) ; Attributes requested
> ;
> ; Set-up the FIB
> ;
> MOVAB WRK_FIB,R6 ; Base of FIB
> CLRQ (R6)+ ; Clear (1,2)
> CLRQ (R6)+ ; (3,4)
> CLRQ (R6)+ ; (5,6)
> CLRQ (R6)+ ; (7,8)
> CLRQ (R6)+ ; (9,10)
> CLRQ (R6) ; (11,12)
> MOVAB WRK_FIB,R6 ; Base of FIB
> MOVL R6,WRK_Q_FIBDSC+DSC$A_POINTER
> MOVW #<12*4>,WRK_Q_FIBDSC+DSC$W_LENGTH
> MOVZWL TBL_ACCTL[R4],FIB$L_ACCTL(R6)
> MOVL NAM$W_DID(R8),FIB$W_DID(R6)
> MOVW NAM$W_DID+4(R8),FIB$W_DID+4(R6)
>
> ---
>
> ;
> 700$: $QIOW_G (R9) ; Issue the $QIO
> Ok, that's just snips. You'd need the entire sources to actually follow
> the details. But, the thing is, no part of RMS was used to open the file.
>
>> I usually do the SYS$OPEN, grab the FID from the NAM block,
>> SYS$CLOSE and then do SYS$QIOW with IO$_ACCESS | IO$M_ACCESS.
You know something I don't.
I have grabbed the FID from NAM and used that to access
the file for like 35 years.
And now I see that you just specify DID in FIB and give
filename as P2.
With the point being that SYS$PARSE return actual DID and
a zero FID in NAM while SYS$OPEN return both DID and FID
in NAM.
Clever.
Arne
More information about the Info-vax
mailing list