ptypes2tcl.cc
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include "packet.h"
  4. // The following copied from ~tclcl/tcl2c++.c
  5. /*
  6.  * Define TCL2C_INT if your compiler has problems with long strings.
  7.  */
  8. #if defined(WIN32) || defined(_WIN32) || defined(__alpha__) || defined(__hpux)
  9. #define TCL2C_INT
  10. #endif
  11. char** p_info::name_;
  12. unsigned int p_info::nPkt_ = 0;
  13. PacketClassifier *p_info::pc_ = 0;
  14. int p_info::addPacket(char *name)
  15. {
  16. if(!nPkt_)
  17. initName();
  18. int newID = nPkt_-1;
  19. PT_NTYPE = nPkt_;
  20. initName();
  21. name_[newID] = name;
  22. return newID;
  23. }
  24. void
  25. printLine(char *s) {
  26. #ifdef TCL2C_INT
  27. for (unsigned int i = 0; i < strlen(s); i++) 
  28. if ((i > 0) && ((i % 20) == 0))
  29. printf("%u,n", s[i]);
  30. else
  31. printf("%u,", s[i]);
  32. printf("%u,%u,n", '\', 'n');
  33. #else
  34. printf("%s\n\n", s);
  35. #endif
  36. }
  37. char *
  38. lcase(const char *s) {
  39. static char charbuf[512];
  40. char* to = charbuf;
  41. while ((*to++ = tolower(*s++)))
  42. /* NOTHING */;
  43. *to = '';
  44. return charbuf;
  45. }
  46. int main() {
  47. p_info pinfo;
  48. #ifdef TCL2C_INT
  49. printf("static const char code[] = {n");
  50. #else
  51. printLine("static const char code[] = "");
  52. #endif
  53. printLine("global ptype pvals");
  54. printLine("set ptype(error) -1");
  55. printLine("set pvals(-1) error");
  56. char strbuf[512];
  57. for (unsigned int i = 0; i < PT_NTYPE; i++) {
  58. sprintf(strbuf, "set ptype(%s) %d", lcase(pinfo.name(packet_t(i))), i);
  59. printLine(strbuf);
  60. sprintf(strbuf, "set pvals(%d) %s", i, pinfo.name(packet_t(i)));
  61. printLine(strbuf);
  62. }
  63. printLine("proc ptype2val {str} {");
  64. printLine("global ptype");
  65. printLine("set str [string tolower $str]");
  66. printLine("if ![info exists ptype($str)] {");
  67. printLine("set str error");
  68. printLine("}");
  69. printLine("set ptype($str)");
  70. printLine("}");
  71. printLine("proc pval2type {val} {");
  72. printLine("global pvals");
  73. printLine("if ![info exists pvals($val)] {");
  74. printLine("set val -1");
  75. printLine("}");
  76. printLine("set pvals($val)");
  77. printLine("}");
  78. #ifdef TCL2C_INT
  79. printf("0 };n");
  80. #else
  81. printf("";n");
  82. #endif
  83. printf("#include "config.h"n");
  84. printf("EmbeddedTcl et_ns_ptypes(code);n");
  85. return 0;
  86. }