[FreeVMS] Re: STR$


Subject: [FreeVMS] Re: STR$
From: BERTRAND JoŽl (joel.k.bertrand@free.fr)
Date: Wed Nov 07 2001 - 14:13:19 CET


roart@nvg.ntnu.no wrote:

> On Wed, Nov 07, 2001 at 12:00:00PM +0100, BERTRAND JoŽl wrote:
>
>>roart@nvg.ntnu.no wrote:
>>
>>
>>>On Wed, Nov 07, 2001 at 09:52:50AM +0100, BERTRAND JoŽl wrote:
>>>
>>>
>>>> I have downloaded the str.tar-gz file. It seems to be corrupt...
>>>>
>>>It seemed ok anyway; it compiled.
>>>
>> My gunzip returns an error.
>>
>
> I used tar xzf

        Same result on a RedHat 7.2 with tar ;-)

Weierstrass:[~/programmes/FreeVMS/tmp] > tar xvfz str.tar-gz
...
test_str_element.c
teststr.c

gzip: stdin: unexpected end of file
virus.txt
tar: Le processus enfant a retournť le statut 1
tar: Statut d'erreur reportť d'erreurs prťcťdentes.
Weierstrass:[~/programmes/FreeVMS/tmp] >

>>>>I have extracted descrip.h, and this file is written from the VAX-11
>>>>procedure calling. All data lengths use unsigned shorts int. I tought
>>>>that the lengths of any datas use integer*4 (on VAX and alpha). Can
>>>>someone confirm ?
>>>>
>
> Further infomation is said to be in "Introduction to VMS System Routines"
> manual, but it seems to be discontinued.
> The information is in OpenVMS Programming Interfaces: Calling a System Routine
> and OpenVMS Calling Standard. Somewhere.
> These manuals describe argument passing mechanisms, including descriptors.
> Maybe it is as simple as that.
>
>
>>>(Will be talking 32-bit "default")
>>>Remember descriptors are passed as pointers, that is 32-bit.
>>>If contents of descriptors are passed, it will be with the 16-bit length
>>>in a 32-bit register (no problem there).
>>>
>> Yes, but if the descriptor uses a 32-bit lengths, why are these
>>lengths declared with unsigned short (16-bits length) ?
>>
>
> I have checked a bit.
> Many descriptors have the length of a quadword (8 bytes), and MOVQ ends up
> moving
> unsigned short dsc$w_length;

        16-bits

> unsigned char dsc$b_dtype;

        8-bits

> unsigned char dsc$b_class;

        8-bits (with gcc)

Thus, this structure uses two 32 bits registers. If we have an
dsc$w_length which is coded with only 16 bits, we will not use a
character string which contains more than 2**16-1 characters, isn't it ?
When I use the Fortran compiler with a VAX version of VMS (5.x), I
believe that the length of the string was coded by an 32-bits integer.
g77 uses 32-bits too.

> into the first register, and moving
> char *dsc$a_pointer; intro the next register.

        Regards,

        JKB

-- 
Liste de diffusion FreeVMS
Pour se dťsinscrire : mailto:freevms-request@ml.free.fr?subject=unsubscribe



This archive was generated by hypermail 2b25 : Wed Nov 07 2001 - 14:12:44 CET