// Managing variables by reference

function Main()
STATIC s:=10

   local x := 0

   QOut( "Managing LOCAL variables by reference" )
   Qout( 'In main before ref1 x=', x )
   ref1( @x )
   Qout( ' In main after ref1 x=', x )


   QOut( "Managing STATIC variables by reference" )
   Qout( 'In main before ref1 s=', s )
   ref1( @s )
   Qout( ' In main after ref1 s=', s )

return nil

function ref1( x )

  x++
  Qout( ' In ref1 before ref2 =', x )
  Ref2( @x )
  Qout( ' In ref1 after ref2 =', x )

return nil

function ref2( x )

  x++
  Qout( '  In ref2 before ref3 =', x )
  Ref3( @x )
  Qout( '  In ref2 after ref3 =', x )

return nil

function ref3( x )
STATIC a

  x++
  Qout( '   In ref3 before ref4 =', x )
  a ={ x, x }
  Ref4( @a )
  Qout( '   In ref3 after ref4 =', x )

return nil

function ref4( a )

  a[ 1 ]++
  Qout( '    In ref4 =', a[ 1 ] )

return nil