# Example of Traversing an Outline

This example demonstrates the use of the outline tree. TraverseTree is a recursive algorithm that traverses the outline tree to provide access to all outline members. It selects each member in turn, allowing processing on each, until it reaches the last member. A comment in the code notes the opportunity for added processing.

This algorithm incorporates several C Outline API commands.

- EsbOtlGetFirstMember() returns a member handle to the first member (the first dimension defined) in the outline.
- EsbOtlGetMemberInfo() gets information for the specified member.
- EsbOtlGetChild() returns the child of a member.
- EsbOtlGetNextSibling() returns the next sibling of a member.

Before executing this code, initialize the API and open the outline. Following this code, close the outline and terminate the API.

    TraverseTree (ESB_HOUTLINE_T)
    {
      ESB_HMEMBER_T hMember;
      ESB_STS_T  sts = 0;

      sts = EsbOtlGetFirstMember(hOutline, &hMember);
      if (!sts && hMember)
        sts = TraverseTreeRecurse(hOutline, hMember);
    }

    TraverseTreeRecurse(ESB_HOUTLINE_T hOutline, ESB_HMEMBER_T hMember)
    {
      ESB_MEMBERINFO_T MbrInfo;
      ESB_HMEMBER_T, hChild;
      ESB_STS_T  sts = 0;

      while (!sts && hMember)
      {
        sts = EsbOtlGetMemberInfo (hOutline, hMember, &MbrInfo);

        /* ADD THE PROCESSING FOR EACH MEMBER HERE. */

        if (!sts)
        {
          sts = EsbOtlGetChild(hOutline, hMember, &hChild);
          if (!sts && hChild)
          {
            sts = TraverseTreeRecurse(hOutline, hChild);
          }
        }
        sts = EsbOtlGetNextSibling(hOutline, hMember, &hMember);
      }
      return (sts);
    }