Saturday, 16 September 2017

%ADDR Example

      * Program     :·AddrR
      * Description :·%Addr() Example
      *
      * %Addr()
      * Input       :·variable, array index, datastructure subfield
      * Output      :·Address of input variable
      *
      * Keyword Description
      *
      * Based       :·Variable is based on pointer
      *               Variable's value will change according to pointer
      *               location
      *==========================================================
      *
     D Arr1            S              6    Dim(2)
     D Arr2            S               *   Dim(2)                                Array of pointers

     D DS1             DS
     D  Fld1                          5
     D  Fld2                          5

     D Var1            S              5    Inz('aaaaa')
     D Var2            S              5    Based(Ptr2)
     D Var3            S              2  0 Inz(1)

     D Ptr             S               *                                         Pointer
     D Ptr2            S               *                                         Pointer

     C
      /Free
        // =================================================
        // For Variables
        // =================================================
           Ptr = %Addr(Var1) ;                 // Ptr --> Var1

           Ptr2 = %Addr(Var1) ;                // Ptr2 --> Var1

           If (Ptr = Ptr2) ;
              Dsply 'Ptr = Ptr2' ;             // True
           EndIf ;

           If (Var1 = Var2) ;                  // same location
              Dsply 'Var1 = Var2' ;            // True
           EndIf ;
        // =================================================
        // For Arrays
        // =================================================

           Ptr = %Addr(Arr1(Var3 + 1)) ;       // Ptr --> Arr1(2)

           // all members of Arr2 will have address of arr1(1)
           // Arr2(1) = Arr1(1)'s address
           // Arr2(2) = Arr1(1)'s address
           Arr2 = %Addr(Arr1) ;

           // members of Arr2 will have corresponding member address of Arr1
           // Arr2(1) = Arr1(1)'s address
           // Arr2(2) = Arr1(2)'s address
           Arr2 = %Addr(Arr1(*)) ;

        // =================================================
        // For Data Structure
        // =================================================

           Ptr2 = %Addr(Fld1) ;                 // Ptr2 --> Fld1

           Fld1 = 'bbbbb' ;
           Dsply Var2 ;                         // 'bbbbb'

      /End-Free
     C                   SetOn                                        LR

No comments:

Post a Comment