distNameShow.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:8k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* distNameShow.c - distributed name database show routines (VxFusion option) */
  2. /* Copyright 1999-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01g,30oct01,jws  fix man pages (SPR 71239)
  7. 01f,22oct01,jws  update distNameShow man page (SPR 70849)
  8. 01e,24may99,drm  added vxfusion prefix to VxFusion related includes
  9. 01d,19feb99,wlf  update output example
  10. 01d,18feb99,wlf  doc cleanup
  11. 01c,13feb99,drm  changed code to display UINT64 type as BIG ENDIAN
  12. 01b,28oct98,drm  documentation modifications
  13. 01a,22sep97,ur   written.
  14. */
  15. /*
  16. DESCRIPTION
  17. This library provides routines for displaying the contents of the
  18. distributed name database.
  19. AVAILABILITY
  20. This module is distributed as a component of the unbundled distributed
  21. message queues option, VxFusion.
  22. INCLUDE FILES: distNameLib.h
  23. SEE ALSO: distNameLib
  24. */
  25. #include "vxWorks.h"
  26. #include "stdio.h"
  27. #include "msgQLib.h"
  28. #include "vxfusion/distNameLib.h"
  29. #include "vxfusion/private/distNodeLibP.h"
  30. #include "vxfusion/private/distNameLibP.h"
  31. LOCAL BOOL distNameDbShowOne (DIST_NAME_DB_NODE *pNode, int unused);
  32. /***************************************************************************
  33. *
  34. * distNameShowInit - initialize show routine (VxFusion option)
  35. *
  36. * This routine currently does nothing.
  37. *
  38. * AVAILABILITY
  39. * This routine is distributed as a component of the unbundled distributed
  40. * message queues option, VxFusion.
  41. *
  42. * RETURNS: N/A
  43. * NOMANUAL
  44. */
  45. void distNameShowInit (void)
  46.     {
  47.     }
  48. /***************************************************************************
  49. *
  50. * distNameShow - display the entire distributed name database (VxFusion option)
  51. *
  52. * This routine displays the entire contents of the distributed name database.
  53. * The data displayed includes the symbolic ASCII name, the type, and the value.
  54. * If the type is not pre-defined, it is printed in decimal and the
  55. * value shown in a hexdump.
  56. *
  57. * NOTE:
  58. * Option VX_FP_TASK should be set when spawning any task in which
  59. * distNameShow() is called unless it is certain that no floating
  60. * point values will be in the database.  The target shell has this option set.
  61. *
  62. * EXAMPLE:
  63. * cs
  64. * -> distNameShow()
  65. *         NAME              TYPE               VALUE
  66. * -------------------- -------------- -------------------------
  67. * nile                    T_DIST_NODE 0x930b2617 (2466981399)
  68. * columbia                T_DIST_NODE 0x930b2616 (2466981398)
  69. * dmq-01                 T_DIST_MSG_Q 0x3ff9fb
  70. * dmq-02                 T_DIST_MSG_Q 0x3ff98b
  71. * dmq-03                 T_DIST_MSG_Q 0x3ff94b
  72. * dmq-04                 T_DIST_MSG_Q 0x3ff8db
  73. * dmq-05                 T_DIST_MSG_Q 0x3ff89b
  74. * gData                          4096 0x48 0x65 0x6c 0x6c 0x6f 0x00 
  75. * gCount                T_DIST_UINT32 0x2d (45)
  76. * grp1                   T_DIST_MSG_Q 0x3ff9bb
  77. * grp2                   T_DIST_MSG_Q 0x3ff90b
  78. * value = 0 = 0x0
  79. * ce
  80. *
  81. * AVAILABILITY
  82. * This routine is distributed as a component of the unbundled distributed
  83. * message queues option, VxFusion.
  84. *
  85. * RETURNS: N/A
  86. */
  87. void distNameShow (void)
  88.     {
  89.     printf ("        NAME              TYPE               VALUEn");
  90.     printf ("-------------------- -------------- -------------------------n");
  91.     distNameEach ((FUNCPTR) distNameDbShowOne, (-1));
  92.     }
  93. /***************************************************************************
  94. *
  95. * distNameFilterShow - display the distributed name database filtered by type (VxFusion option)
  96. *
  97. * This routine displays the contents of the distributed name database
  98. * filtered by <type>.  The data displayed includes the symbolic ASCII name, the 
  99. * type, and the value.  If the type is not pre-defined, it is printed 
  100. * in decimal and the value shown in a hexdump.
  101. *
  102. * NOTE:
  103. * Option VX_FP_TASK should be set when spawning any task in which
  104. * distNameFilterShow() is called unless it is certain that no floating
  105. * point values will be displayed.  The target shell has this option set.
  106. *
  107. * EXAMPLE:
  108. * cs
  109. * -> distNameFilterShow(0)
  110. *         NAME              TYPE               VALUE
  111. * -------------------- -------------- -------------------------
  112. * dmq-01                 T_DIST_MSG_Q 0x3ff9fb
  113. * dmq-02                 T_DIST_MSG_Q 0x3ff98b
  114. * dmq-03                 T_DIST_MSG_Q 0x3ff94b
  115. * dmq-04                 T_DIST_MSG_Q 0x3ff8db
  116. * dmq-05                 T_DIST_MSG_Q 0x3ff89b
  117. * grp1                   T_DIST_MSG_Q 0x3ff9bb
  118. * grp2                   T_DIST_MSG_Q 0x3ff90b
  119. * value = 0 = 0x0
  120. * ce
  121. *
  122. * AVAILABILITY
  123. * This routine is distributed as a component of the unbundled distributed
  124. * message queues option, VxFusion.
  125. * RETURNS: N/A
  126. */
  127. void distNameFilterShow
  128.     (
  129.     DIST_NAME_TYPE    type  /* type to filter the database by */
  130.     )
  131.     {
  132.     printf ("        NAME              TYPE               VALUEn");
  133.     printf ("-------------------- -------------- -------------------------n");
  134.     distNameEach ((FUNCPTR) distNameDbShowOne, type);
  135.     }
  136. /***************************************************************************
  137. *
  138. * distNameDbShowOne - helper function to display one single node of database (VxFusion option)
  139. *
  140. * This routine display one node of the database.
  141. *
  142. * AVAILABILITY
  143. * This routine is distributed as a component of the unbundled distributed
  144. * message queues option, VxFusion.
  145. *
  146. * RETURNS: TRUE
  147. *
  148. * NOMANUAL
  149. */
  150. LOCAL BOOL distNameDbShowOne
  151.     (
  152.     DIST_NAME_DB_NODE *    pNode,    /* node whose data to show */
  153.     int                    filter    /* type to show, or -1 for all */
  154.     )
  155.     {
  156.     if (filter != (-1) && pNode->type != filter)
  157.         return (TRUE);
  158.     printf ("%-20s ", (char *) &(pNode->symName));
  159.     switch (pNode->type)
  160.         {
  161.         case T_DIST_MSG_Q:
  162.             printf ("  T_DIST_MSG_Q %p",
  163.                     *((MSG_Q_ID *) &pNode->value));
  164.             break;
  165.         case T_DIST_NODE:
  166.             printf ("   T_DIST_NODE 0x%lx (%lu)",
  167.                     *((DIST_NODE_ID *) &pNode->value),
  168.                     *((DIST_NODE_ID *) &pNode->value));
  169.             break;
  170.         case T_DIST_UINT8:
  171.             printf ("  T_DIST_UINT8 0x%x (%u)",
  172.                     *((uint8_t *) &pNode->value),
  173.                     *((uint8_t *) &pNode->value));
  174.             break;
  175.         case T_DIST_UINT16:
  176.             printf (" T_DIST_UINT16 0x%x (%u)",
  177.                     *((uint16_t *) &pNode->value),
  178.                     *((uint16_t *) &pNode->value));
  179.             break;
  180.         case T_DIST_UINT32:
  181.             printf (" T_DIST_UINT32 0x%lx (%lu)",
  182.                     *((uint32_t *) &pNode->value),
  183.                     *((uint32_t *) &pNode->value));
  184.             break;
  185.         case T_DIST_UINT64:
  186.             /* Display UINT64 most significant byte first */
  187.             printf (" T_DIST_UINT64 ");
  188.             #if _BYTE_ORDER == _BIG_ENDIAN
  189.             {
  190.             int i;
  191.             printf ("0x");
  192.             for (i=0; i<pNode->valueLen; i++)
  193.                 printf ("%02x", *(((uint8_t *) &pNode->value) + i));
  194.             }
  195.             #endif
  196.             #if _BYTE_ORDER == _LITTLE_ENDIAN
  197.             {
  198.             int i;
  199.             printf("0x");
  200.             for (i=0; i<pNode->valueLen; i++)
  201.                 printf ("%02x",
  202.                         *(((uint8_t *) &pNode->value) +
  203.                           (pNode->valueLen)-1-i));
  204.             }
  205.             #endif
  206.             break;
  207.         case T_DIST_FLOAT:
  208.             printf ("  T_DIST_FLOAT %f",
  209.                     *((float *) &pNode->value));
  210.             break;
  211.         case T_DIST_DOUBLE:
  212.             printf (" T_DIST_DOUBLE %f",
  213.                     *((double *) &pNode->value));
  214.             break;
  215.         default:
  216.             {
  217.             int i;
  218.             printf ("%14d ", pNode->type);
  219.             for (i=0; i<pNode->valueLen; i++)
  220.                 printf ("0x%02x ", *(((uint8_t *) &pNode->value) + i));
  221.             }
  222.         }
  223.     printf ("n");
  224.     return (TRUE);    /* continue */
  225.     }