Steve,

John is correct. Array variables are stored at a higher memory address than scalar variables. Anytime a new scalar (i.e. non-array) variable is created, the addresses of the array variables must all change to make room for the new scalar variable. So the return value from VARPTR for array variables is only valid for as long a there are no new scalar variables delcared.

Ken

On 5/28/18 4:37 PM, Stephen Adolph wrote:
sounds plausible.

for reference here is the code. I have 4 embedded ML programs that I want to select to run.

2 REM good command sequence
3 A$(0)="using good sequence":D$(0)="ó:@ð:@ð:¸ð:òð:4ð:°ð:1ð:¿ð77~2ÀüûÉ"
4 REM bad command sequence  add 7 after 4@
5 A$(1)="using bad sequence1":D$(1)="ó:@ð:@ð:¸ð:òð:4ð7:°ð:1ð:¿ð77~2ÀüûÉ"
6 REM bad command sequence 2 add 7 after 77
7 A$(2)="using bad sequence2":D$(2)="ó:@ð:@ð:¸ð:òð:4ð:°ð:1ð:¿ð77&~2ÀüûÉ"
8 REM bad command sequence 3 remove 7 from 77
9 A$(3)="using bad sequence3":D$(3)="ó:@ð:@ð:¸ð:òð:4ð:°ð:1ð:¿ð7~2ÀüûÉ"
10 CLS:PRINT"Send command + data to REXCPM"
11 INPUT"select command sequence (1-4)";S:IF S<1 OR S>4 THEN 10
12 S=S-1
20 PRINT A$(S):F=0:K=VARPTR(D$(S)):F=256*PEEK(K+2)+PEEK(K+1)
21 PRINTF
22 FORI=1TOLEN(D$(S)):IF ASC(MID$(D$(S),I,1)) <> PEEK(F+I-1) THEN BEEP:PRINT"bad!":END
23 NEXTI:PRINT"good!!"
30 INPUT"Enter command byte";L
40 INPUT"enter data byte";H
50 CALLF,0,256*H+L
60 PRINT"result = ";PEEK(64704)
70 PRINT"hit any key to repeat"
80 IFINKEY$=""THEN 80
90 GOTO10


On Mon, May 28, 2018 at 7:36 PM, John R. Hogerhuis <[email protected] <mailto:[email protected]>> wrote:


    On Mon, May 28, 2018 at 4:29 PM Stephen Adolph
    <[email protected] <mailto:[email protected]>> wrote:

        yes, I do have a dim but ..not sure it matters though. I think
        I tried with and without.


    Hmm. Not sure how the basic variable allocator works. But if
    putting F=0 makes it work or not work I suspect that assigning F
    for the first time creates a new variable and caused the array to
    move.

    DIM’ing either or both, or assigning a value like you did might
    resolve.

    Whether that’s a bug I don’t know. Maybe you just need to be
    careful not to allocate variables between when you take VARPTR and
    when you use it the address.

    — John



Reply via email to