[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