[Info-vax] VAX BASIC global variables.

Arne Vajhøj arne at vajhoej.dk
Fri Oct 15 11:18:57 EDT 2021


On 10/15/2021 5:42 AM, E Thump wrote:
> On Friday, October 15, 2021 at 3:29:53 AM UTC+1, Stephen Hoffman wrote:
>> The keyword you're looking for is EXTERNAL. See page 105 in the
>> reference manual, linked above.
>>
>> COMMON (reference manual page 67) is not what you want.
> 
> Here's what I've done now:
> 
> External SUB adder (integer,integer)
> External INTEGER a,b
> 
> a=100
> b=200
> 
> print "a+b before sub: ",a+b
> call adder (10,20)
> print "a+b after sub: ",a+b
> 
> end program
> 
> sub adder (integer c,integer d)
> a=400
> b=1000
> print "a+b in sub: ",a+b
> print "c+d in sub: ",c+d
> end sub
> 
> compiles clean but throws this when linking :
> 
> %LINK-W-NUDFSYMS, 2 undefined symbols:
> %LINK-I-UDFSYM,         A
> %LINK-I-UDFSYM,         B
> %LINK-W-USEUNDEF, undefined symbol A referenced
>          in psect $CODE offset %X00000021
>          in module TEST$MAIN file SYS$USERS:[ECKY]TEST.OBJ;24
> %LINK-W-USEUNDEF, undefined symbol B referenced
>          in psect $CODE offset %X0000002C
>          in module TEST$MAIN file SYS$USERS:[ECKY]TEST.OBJ;24
> %LINK-W-USEUNDEF, undefined symbol A referenced
>          in psect $CODE offset %X00000048
>          in module TEST$MAIN file SYS$USERS:[ECKY]TEST.OBJ;24
> ......

You need them defined somewhere.

I don't know how to make a symbol global in Basic.

It is easy in C:

$ type extdemo.bas
program extdemo
external integer v
v = 1
call s1
end program

sub s1
external integer v
v = v + 1
call s2
end sub

sub s2
external integer v
v = v + 1
print v
end sub
$ bas extdemo
$ type v.c
int v;
$ cc v
$ link extdemo + v
$ r extdemo
  3

Arne




More information about the Info-vax mailing list