Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

176 lines
5.3 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. //
  5. // Copyright (C) Microsoft Corporation, 1998 - 1999
  6. //
  7. // File: tcldllutil.h
  8. //
  9. //--------------------------------------------------------------------------
  10. #ifndef _TCLDLLUTIL_H_
  11. #define _TCLDLLUTIL_H_
  12. #include <stdlib.h>
  13. #include <tcl.h>
  14. extern int
  15. toWin32List( /* Convert a Tcl List to a Win32 multi-string. */
  16. Tcl_Interp *interp,
  17. char *tclList,
  18. unsigned int *winListSize,
  19. char **winList);
  20. extern int
  21. fromWin32List( /* Convert a Win32 multi-string to a list. */
  22. Tcl_Interp *interp,
  23. char *winList);
  24. /*
  25. * Local symbols %locals%
  26. *
  27. * Local Symbol Name Description
  28. ----------------- --------------------------------------------*/
  29. static char
  30. **TclEx_tmpArray /* Storage for expanding string arrays. */
  31. = NULL;
  32. static unsigned int
  33. TclEx_tmpArraySize /* How big we are so far. */
  34. = 0;
  35. static char
  36. *TclEx_tmpBuffer /* Storage for expanding string buffers. */
  37. = NULL;
  38. static unsigned int
  39. TclEx_tmpBufferSize /* How big we are so far. */
  40. = 0;
  41. static const char
  42. Space[] /* A string of one space. */
  43. = " ",
  44. Quote[] /* A string of a quote symbol. */
  45. = "\"";
  46. /*
  47. * Local routines %prototypes%
  48. *
  49. * Local Function Name Description
  50. ------------------- --------------------------------------------*/
  51. /*
  52. * Macro definitions %macros%
  53. *
  54. * Macro Name Description
  55. ---------- --------------------------------------------*/
  56. //
  57. // Temporary buffer and array management.
  58. //
  59. #define TMP_BUFFER TclEx_tmpBuffer
  60. #define TMP_BUFFER_SIZE TclEx_tmpBufferSize
  61. #define TMP_ARRAY TclEx_tmpArray
  62. #define TMP_ARRAY_SIZE TclEx_tmpArraySize
  63. #ifdef _DEBUG
  64. //
  65. // Get some temporary buffer.
  66. #define NEED_TMP_BUFFER(sz) \
  67. if (0 != TclEx_tmpBufferSize) { \
  68. (void)fprintf(stderr, "TMP_BUFFER locked.\n"); \
  69. exit(1); } \
  70. else { \
  71. TclEx_tmpBuffer = (char *)ckalloc(sz); \
  72. TclEx_tmpBufferSize = (sz); }
  73. //
  74. // Get more temporary buffer.
  75. #define NEED_MORE_TMP_BUFFER(sz) \
  76. if (0 == TclEx_tmpBufferSize) { \
  77. (void)fprintf(stderr, "TMP_BUFFER not locked.\n"); \
  78. exit(1); } \
  79. else { if (TclEx_tmpBufferSize < (sz)) { \
  80. TclEx_tmpBuffer = (char *)ckrealloc(TclEx_tmpBuffer, (sz)); \
  81. TclEx_tmpBufferSize = (sz); } }
  82. //
  83. // All done with the temporary buffer.
  84. #define DONE_TMP_BUFFER \
  85. { if (NULL != TclEx_tmpBuffer) { \
  86. ckfree(TclEx_tmpBuffer); TclEx_tmpBuffer = NULL; TclEx_tmpBufferSize = 0; }}
  87. //
  88. // Get a temporary array.
  89. #define NEED_TMP_ARRAY(sz) \
  90. if (0 != TclEx_tmpArraySize) { \
  91. (void)fprintf(stderr, "TMP_ARRAY locked.\n"); \
  92. exit(1); } \
  93. else { \
  94. TclEx_tmpArray = (char **)ckalloc((sz) * sizeof(void *)); \
  95. TclEx_tmpArraySize = (sz); }
  96. //
  97. // Get more temporary array.
  98. #define NEED_MORE_TMP_ARRAY(sz) \
  99. if (0 == TclEx_tmpArraySize) { \
  100. (void)fprintf(stderr, "TMP_ARRAY not locked.\n"); \
  101. exit(1); } \
  102. else { if (TclEx_tmpArraySize < (sz)) { \
  103. TclEx_tmpArray = (char **)ckrealloc((char *)TclEx_tmpArray, (sz) * sizeof(void *)); \
  104. TclEx_tmpArraySize = (sz); } }
  105. //
  106. // All done with the temporary array.
  107. #define DONE_TMP_ARRAY \
  108. { ckfree((char *)TclEx_tmpArray); TclEx_tmpArray = NULL; TclEx_tmpArraySize = 0; }
  109. #define TMP_RETURN TCL_VOLATILE
  110. #else
  111. //
  112. // Get some temporary buffer.
  113. #define NEED_TMP_BUFFER(sz) \
  114. if (TclEx_tmpBufferSize < (sz)) { \
  115. if (0 == TclEx_tmpBufferSize) \
  116. { TclEx_tmpBuffer = (char *)ckalloc(sz); } \
  117. else \
  118. { TclEx_tmpBuffer = (char *)ckrealloc(TclEx_tmpBuffer, (sz)); } \
  119. TclEx_tmpBufferSize = (sz); }
  120. //
  121. // Get more temporary buffer.
  122. #define NEED_MORE_TMP_BUFFER(sz) \
  123. if (TclEx_tmpBufferSize < (sz)) { \
  124. TclEx_tmpBuffer = (char *)ckrealloc((char *)TclEx_tmpBuffer, (sz)); \
  125. TclEx_tmpBufferSize = (sz); }
  126. //
  127. // All done with the temporary buffer.
  128. #define DONE_TMP_BUFFER
  129. //
  130. // Get a temporary array.
  131. #define NEED_TMP_ARRAY(sz) \
  132. if (TclEx_tmpArraySize < (sz)) { \
  133. if (0 != TclEx_tmpArraySize) \
  134. ckfree(TclEx_tmpArray); \
  135. TclEx_tmpArray = (char **)ckalloc((sz) * sizeof(void *)); \
  136. TclEx_tmpArraySize = (sz); }
  137. //
  138. // Get more temporary array.
  139. #define NEED_MORE_TMP_ARRAY(sz) \
  140. if (TclEx_tmpArraySize < (sz)) { \
  141. TclEx_tmpArray = (char **)ckrealloc(TclEx_tmpArray, (sz) * sizeof(void *)); \
  142. TclEx_tmpArraySize = (sz); }
  143. //
  144. // All done with the temporary array.
  145. #define DONE_TMP_ARRAY
  146. #define TMP_RETURN TCL_STATIC
  147. #endif
  148. #endif /* _TCLDLLUTIL_H_ */
  149. /* end tcldllUtil.h */