SYNOPSIS
        #include <struct_info.h>
        #include <lpctypes.h>

        mixed * struct_info(struct st, int what)

DESCRIPTION
        Return information about the structure of struct <st> in an array.
        If <st> has a base struct, <what> determines how the information
        is returned:

        <what> == SINFO_FLAT:
            All members of <st>, including those inherited from the base
            struct, are returned on the top level of the result.
            The base struct is signified by just its name.

        <what> == SINFO_NESTED:
            Only the members defined in <st> itself are returned on
            the top level of the result. The information for the base
            struct is a array by itself, as it would be returned
            by a call to struct_info() for a base struct instance.

        The elements in the resulting array are:

          string [SI_NAME]:        the name of the struct
          string [SI_PROG_NAME]:   the name of program defining the struct
          string [SI_PROG_ID]:     the id of the program defining the struct
          mixed  [SI_BASE]:        0, or the base struct information
          mixed *[SI_MEMBER+0]:    the first member information
          mixed *[SI_MEMBER+n]:    the last member information

        The member information entries are arrays themselves with
        these elements:

          string [SIM_NAME]:  name of the member
          int    [SIM_TYPE]:  the type of the member (compile-time value)
          string [SIM_EXTRA]: 0, or if the member is a struct, the
                              struct name

HISTORY
        Introduced in LDMud 3.3.344.
        LDMud 3.3.417 introduced SI_PROG_NAME and SI_PROG_ID in exchange
          for SI_UNIQUE_NAME.

SEE ALSO
        structs(LPC)
