[Info-vax] Creating an open source version of VMS, was: Re: OpenVMS Hobbyist Notification

Arne Vajhøj arne at vajhoej.dk
Thu Mar 12 16:39:51 EDT 2020


On 3/12/2020 4:10 PM, Arne Vajhøj wrote:
> On 3/12/2020 3:20 PM, Simon Clubley wrote:
>> On 2020-03-12, Arne Vajhøj <arne at vajhoej.dk> wrote:
>>> On 3/11/2020 10:12 PM, Simon Clubley wrote:
>>>> A really good example is RMS and the control blocks and what happened
>>>> during the move to 64-bit processes.
>>>>
>>>> In Unix land, an address variable looks like this:
>>>>
>>>>     {some data type or struct} *ptr;
>>>>     ptr = data_structure->flink;
>>>>
>>>> The Unix land compiler, regardless of language, handles all the 
>>>> conversions
>>>> from 32-bit pointers to 64-bit pointers when you rebuild this code for
>>>> 64-bit mode without you having to change this code.
>>>>
>>>> In VMS land, thanks to the need to support Macro-32, an address
>>>> looks something like this:
>>>>
>>>>     uint32 ptr;
>>>>     ptr = (uint32) source_address;    /* YUCK YUCK YUCK ! :-) */
>>>>
>>>> with total loss of any address attribute information.
>>>
>>> ????
>>>
>>> When I search after $l_fab, $l_rab, $l_nam, $l_kbf, $l_rbf, $l_ubf
>>> etc. I see pointer and pointers.
>>>
>>> You don't?
>>
>> They may be called "pointers" but they are nothing like the abstracted
>> pointers you see in a modern environment, including in C and Unix.
>  >
>  > They are nothing more than raw longwords that have had an address
>  > forced into them.
> 
> ????
> 
> As far as I am aware C old or new only got one type of pointers,
> those you declare like:
> 
> type *var;
> 
> The C header files for RMS definition on VMS contains:
> 
> struct xxx {
>     ...
>     struct yyy *xxx$l_yyy;
>     ...
> }
> 
> How does your "the abstracted pointers you see in a modern environment"
> do that?

And where do you see:

 >>>>     uint32 ptr;
 >>>>     ptr = (uint32) source_address;    /* YUCK YUCK YUCK ! :-) */

?

Arne



More information about the Info-vax mailing list