VARPTR$: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
(Created page with "'''VARPTR$''' is a memory function that returns a STRING representation of a variable's memory address value for use in a DRAW or PLAY statement. {{PageSyntax}} :: string_value$ = VARPTR$(''variable'') * Can use any string or numerical variable reference '''existing''' in memory. * If the parameter value is from an array it must be dimensioned already. Cannot use fixed length string arrays. * When using '''numerical''' ''variable'' values in ...")
 
No edit summary
 
(3 intermediate revisions by 2 users not shown)
Line 14: Line 14:


''Example 1:'' How VARPTR$ reads consecutive values from memory.
''Example 1:'' How VARPTR$ reads consecutive values from memory.
{{CodeStart}} '' ''
{{CodeStart}}
{{Cl|SCREEN (statement)|SCREEN}} 2
{{Cl|SCREEN}} 2
{{Cl|CLS}}
{{Cl|CLS}}
WIND$ = "r10 d7 l10 u7 br20"  'create draw string to be read by function
WIND$ = "r10 d7 l10 u7 br20"  'create draw string to be read by function
Line 23: Line 23:
{{Cl|FOR...NEXT|FOR}} I = 1 {{Cl|TO}} 10
{{Cl|FOR...NEXT|FOR}} I = 1 {{Cl|TO}} 10
     {{Cl|DRAW}} "x" + {{Cl|VARPTR$}}(ROW$)
     {{Cl|DRAW}} "x" + {{Cl|VARPTR$}}(ROW$)
{{Cl|NEXT}} '' ''
{{Cl|NEXT}}
{{CodeEnd}}
{{CodeEnd}}
:''NOTE:'' '''GWBasic''' allows '''semicolons''' to be used in the ROW$ definition, but Qbasic and '''QB64''' MUST use '''+''' concatenation.
:''NOTE:'' '''GWBasic''' allows '''semicolons''' to be used in the ROW$ definition, but QBasic and '''QB64''' MUST use '''+''' concatenation.




''Example 2:'' Using the function to change a Turn Angle value using DRAW.
''Example 2:'' Using the function to change a Turn Angle value using DRAW.
{{CodeStart}} '' ''
{{CodeStart}}
{{Cl|SCREEN (statement)|SCREEN}} 12
{{Cl|SCREEN}} 12
                           'Demonstrates how string DRAW angles are used with TA
                           'Demonstrates how string DRAW angles are used with TA
{{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} 360 {{Cl|STEP}} 30          'mark clock hours every 30 degrees
{{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} 360 {{Cl|STEP}} 30          'mark clock hours every 30 degrees
   angle$ = {{Cl|STR$}}(i)                'change degree value i to a string  
   angle$ = {{Cl|STR$}}(i)                'change degree value i to a string
   {{Cl|PSET}} (175, 250), 6              'clock center
   {{Cl|PSET}} (175, 250), 6              'clock center
   {{Cl|DRAW}} "TA" + angle$ + "BU100"    'add string angle to Turn Angle and draw blind up
   {{Cl|DRAW}} "TA" + angle$ + "BU100"    'add string angle to Turn Angle and draw blind up
   {{Cl|CIRCLE}} {{Cl|STEP}}(0, 0), 5, 12        'place a circle at end of Up line
   {{Cl|CIRCLE}} {{Cl|STEP}}(0, 0), 5, 12        'place a circle at end of Up line
   {{Cl|DRAW}} "P9, 12"
   {{Cl|DRAW}} "P9, 12"
   {{Cl|_DELAY}} .5          
   {{Cl|_DELAY}} .5
{{Cl|NEXT}}
{{Cl|NEXT}}
                             'Demonstrates how VARPTR$ is used with TA=  
                             'Demonstrates how VARPTR$ is used with TA=
{{Cl|DO}}: sec$ = {{Cl|RIGHT$}}({{Cl|TIME$}}, 2)        'get current second value from time
{{Cl|DO}}: sec$ = {{Cl|RIGHT$}}({{Cl|TIME$}}, 2)        'get current second value from time
   degree = {{Cl|VAL}}(sec$) * -6          'use a negative value to Turn Angle clockwise
   degree = {{Cl|VAL}}(sec$) * -6          'use a negative value to Turn Angle clockwise
Line 49: Line 49:
   {{Cl|PSET}} (175, 250), 0
   {{Cl|PSET}} (175, 250), 0
   {{Cl|DRAW}} "TA=" + {{Cl|VARPTR$}}(degree) + "U90"  'erase previous second hand draw
   {{Cl|DRAW}} "TA=" + {{Cl|VARPTR$}}(degree) + "U90"  'erase previous second hand draw
{{Cl|LOOP}} '' ''
{{Cl|LOOP}}
{{CodeEnd}}
{{CodeEnd}}
:''Explanation:'' When the VARPTR$ value is used in DRAW, '''=''' MUST be used to pass the value to the draw! Negative Turn Angle values move clockwise and each second moves the hand 6 degrees. '''TA''' uses actual degree angles starting at 0 or noon.
:''Explanation:'' When the VARPTR$ value is used in DRAW, '''=''' MUST be used to pass the value to the draw! Negative Turn Angle values move clockwise and each second moves the hand 6 degrees. '''TA''' uses actual degree angles starting at 0 or noon.
Line 55: Line 55:


''Example 3:'' Comparing DRAW moves using VARPTR$ and [[STR$]] values.
''Example 3:'' Comparing DRAW moves using VARPTR$ and [[STR$]] values.
{{CodeStart}} '' ''
{{CodeStart}}
{{Cl|SCREEN}} 12
{{Cl|SCREEN}} 12
{{Cl|PSET}} (200, 200), 12
{{Cl|PSET}} (200, 200), 12
Line 66: Line 66:
C = 100: D = -100
C = 100: D = -100
{{Cl|DRAW}} "M+" + {{Cl|STR$}}(C) + "," + {{Cl|STR$}}(D) 'must add + for positive relative moves
{{Cl|DRAW}} "M+" + {{Cl|STR$}}(C) + "," + {{Cl|STR$}}(D) 'must add + for positive relative moves
{{Cl|END}} '' ''
{{Cl|END}}
{{CodeEnd}}
{{CodeEnd}}
: ''Explanation:'' A negative STR$ value will move the DRAW relatively where VARPTR$ won't without the sign before the equal.
: ''Explanation:'' A negative STR$ value will move the DRAW relatively where VARPTR$ won't without the sign before the equal.




''See also:''
{{PageSeeAlso}}
* [[VARPTR]], [[STR$]]  
* [[VARPTR]], [[STR$]]
* [[DRAW]], [[PLAY]]
* [[DRAW]], [[PLAY]]




{{PageNavigation}}
{{PageNavigation}}

Latest revision as of 01:20, 29 January 2023

VARPTR$ is a memory function that returns a STRING representation of a variable's memory address value for use in a DRAW or PLAY statement.


Syntax

string_value$ = VARPTR$(variable)


  • Can use any string or numerical variable reference existing in memory.
  • If the parameter value is from an array it must be dimensioned already. Cannot use fixed length string arrays.
  • When using numerical variable values in DRAW strings, use an = sign after the function letter. "TA=" + VARPTR$(variable%)
  • Always use variable X as in "X" + VARPTR$(string_variable$) to DRAW or PLAY another STRING value.
  • DRAW relative Moves use a + or - before the equal sign. EX: DRAW "M+=" + VARPTR$(x%) + ",-=" + VARPTR$(y%)


Example 1: How VARPTR$ reads consecutive values from memory.

SCREEN 2
CLS
WIND$ = "r10 d7 l10 u7 br20"   'create draw string to be read by function
ROW$ = "x"+VARPTR$(WIND$)+"x"+VARPTR$(WIND$)+"x"+VARPTR$(WIND$)+" x"+VARPTR$(WIND$)+"bl80 bd11"
LINE (100, 50)-(200, 160), , B
DRAW "bm 115,52"
FOR I = 1 TO 10
    DRAW "x" + VARPTR$(ROW$)
NEXT
NOTE: GWBasic allows semicolons to be used in the ROW$ definition, but QBasic and QB64 MUST use + concatenation.


Example 2: Using the function to change a Turn Angle value using DRAW.

SCREEN 12
                           'Demonstrates how string DRAW angles are used with TA
FOR i = 0 TO 360 STEP 30           'mark clock hours every 30 degrees
  angle$ = STR$(i)                 'change degree value i to a string
  PSET (175, 250), 6               'clock center
  DRAW "TA" + angle$ + "BU100"     'add string angle to Turn Angle and draw blind up
  CIRCLE STEP(0, 0), 5, 12         'place a circle at end of Up line
  DRAW "P9, 12"
  _DELAY .5
NEXT
                            'Demonstrates how VARPTR$ is used with TA=
DO: sec$ = RIGHT$(TIME$, 2)        'get current second value from time
  degree = VAL(sec$) * -6          'use a negative value to Turn Angle clockwise
  PSET (175, 250), 9               'clock center
  DRAW "TA=" + VARPTR$(degree) + "U90"  'VARPTR$ value requires = in DRAW
  DO: _LIMIT 30: LOOP UNTIL RIGHT$(TIME$, 2) <> sec$  'loop until seconds value changes
  IF INKEY$ <> "" THEN EXIT DO
  PSET (175, 250), 0
  DRAW "TA=" + VARPTR$(degree) + "U90"  'erase previous second hand draw
LOOP
Explanation: When the VARPTR$ value is used in DRAW, = MUST be used to pass the value to the draw! Negative Turn Angle values move clockwise and each second moves the hand 6 degrees. TA uses actual degree angles starting at 0 or noon.


Example 3: Comparing DRAW moves using VARPTR$ and STR$ values.

SCREEN 12
PSET (200, 200), 12
CIRCLE STEP(0, 0), 5, 10
A = 100: B = 100
DRAW "M+=" + VARPTR$(A) + ",-=" + VARPTR$(B)

PSET (400, 400), 10
CIRCLE STEP(0, 0), 5, 12
C = 100: D = -100
DRAW "M+" + STR$(C) + "," + STR$(D) 'must add + for positive relative moves
END
Explanation: A negative STR$ value will move the DRAW relatively where VARPTR$ won't without the sign before the equal.


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link