[Info-vax] VAX BASIC global variables.
Dave Froble
davef at tsoft-inc.com
Fri Oct 15 16:37:01 EDT 2021
On 10/15/2021 3:13 PM, Arne Vajhøj wrote:
> On 10/15/2021 3:03 PM, Dave Froble wrote:
>> On 10/15/2021 12:56 PM, Arne Vajhøj wrote:
>>> On 10/15/2021 12:09 PM, E Thump wrote:
>>>> On Friday, October 15, 2021 at 4:44:49 PM UTC+1, Jeffrey H. Coffield
>>>> wrote:
>>>>> COMMON (MY_DATA) INTEGER a,b
>>>
>>>>> sub adder (integer c,integer d)
>>>
>>>> Next question to do with arrays. Instead of doing DIM Z(10) it seems
>>>> I should do COMMON (MY_DATA) INTEGER Z(10) and then use that exact
>>>> same line within the sub. The 10 and everything has to match. Am I on
>>>> the right lines there?
>>>
>>> Yes.
>>>
>>> Declarations *should* match.
>>>
>>> They are not strictly required to, but it becomes
>>> pretty messy if they don't.
>>>
>>> This does not look good:
>>>
>>> program hack
>>> common (mydata) long a(2)
>>> call s
>>> print a(0),a(1)
>>> end program
>>>
>>> sub s
>>> common (mydata) word a(4)
>>> a(0) = 1
>>> a(1) = 1
>>> a(2) = 2
>>> a(3) = 2
>>> end sub
>>
>> In Arne's example, the linker will allocate space for the 4 element array,
>> but the main program will not be able to address a(3).
>
> It runs fine.
>
> And outputs exactly what I expected.
>
> $ bas hack
> $ lin hack
> $ run hack
> 65537 131074
>
> (which is 00010001 and 00020002 in hex)
>
> But definitely not nice.
I see my reading skills are deteriorating, like the rest of me. I missed the
LONG vs WORD. I thought you were defining different size common blocks.
And a(4) is a 5 element array, not 4 as I stated elsewhere.
Re-defining a storage location can be useful.
MAP (Z) LONG A%
MAP (Z) String A$=4
--
David Froble Tel: 724-529-0450
Dave Froble Enterprises, Inc. E-Mail: davef at tsoft-inc.com
DFE Ultralights, Inc.
170 Grimplin Road
Vanderbilt, PA 15486
More information about the Info-vax
mailing list