Lars Gjörling
<6825>
· Text 7377 · w8 · kommentar
1987-08-13 23:34
Ärende: Ändra lokala variabler
OK. Då får du dimma strängvariabeln till 0 och sedan ändra dess
varoot så att dess dataarea ligger i heltalsvariablernas.
Om Aa¤ skall bara ha 2 bytes och innehålla en enda integer-varia-
bel, så kan du ha lokala variabler, men skall den innehålla flera
tal, så måste du använda en heltalsvektor, så att deras talvärden
ligger lagrade efter varandra i minnet. Strängvariabeln kan då vara
lokal men inte vektorn. Så här kan det gå till, du får själv passa
in det i en funktion:
10 INTEGER : EXTEND : ; CHR¤(12);
20 DIM Aa¤=0,Bb(2)
30 POKE VAROOT(Aa¤),6,0,VARPTR(Bb(0)),SWAP%(VARPTR(Bb(0))),6,0
40 Bb(0)=1234 : Bb(1)=4567 : Bb(2)=4321
50 FOR I=1 TO 6 : ; ASCII(MID¤(Aa¤,I,1)); : NEXT I
I ovanstående exempel har Aa¤ dimensionerats till 0 (kan göras som
LOCAL Aa¤=0) och dessutom en vektor, som kan tilldelas värdena
Bb(0), Bb(1) och Bb(2). Deras data kommer då att ligga efter var-
andra på adress VARPTR(B(0)).
Aa¤ dimensioneras om till 6 bytes och dess dataarea läggs så att
den sammanfaller med talens.
Som du finner om du provkör, kommer Aa¤ att automatiskt innehålla
lowbyte/highbyte ......... för de tre talen.
Att istället poka om adresser för enkla heltals dataarior går inte
eftersom deras varoot inte innehåller pekare. Talets två bytes kom-
mer direkt efter variabelnamnet.
Mvh Lars