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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1994 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '" Copyright (c) 2000 Ajuba Solutions.
  5. '"
  6. '" See the file "license.terms" for information on usage and redistribution
  7. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  8. '" 
  9. '" RCS: @(#) $Id: Tcl_Main.3,v 1.9 2002/07/01 18:24:39 jenglish Exp $
  10. '" 
  11. .so man.macros
  12. .TH Tcl_Main 3 8.4 Tcl "Tcl Library Procedures"
  13. .BS
  14. .SH NAME
  15. Tcl_Main, Tcl_SetMainLoop - main program and event loop definition for Tcl-based applications
  16. .SH SYNOPSIS
  17. .nf
  18. fB#include <tcl.h>fR
  19. .sp
  20. fBTcl_MainfR(fIargc, argv, appInitProcfR)
  21. .sp
  22. fBTcl_SetMainLoopfR(fImainLoopProcfR)
  23. .SH ARGUMENTS
  24. .AS Tcl_AppInitProc *appInitProc
  25. .AP int argc in
  26. Number of elements in fIargvfR.
  27. .AP char *argv[] in
  28. Array of strings containing command-line arguments.
  29. .AP Tcl_AppInitProc *appInitProc in
  30. Address of an application-specific initialization procedure.
  31. The value for this argument is usually fBTcl_AppInitfR.
  32. .AP Tcl_MainLoopProc *mainLoopProc in
  33. Address of an application-specific event loop procedure.
  34. .BE
  35. .SH DESCRIPTION
  36. .PP
  37. fBTcl_MainfR can serve as the main program for Tcl-based shell
  38. applications.  A ``shell application'' is a program
  39. like tclsh or wish that supports both interactive interpretation
  40. of Tcl and evaluation of a script contained in a file given as
  41. a command line argument.  fBTcl_MainfR is offered as a convenience
  42. to developers of shell applications, so they do not have to 
  43. reproduce all of the code for proper initialization of the Tcl
  44. library and interactive shell operation.  Other styles of embedding
  45. Tcl in an application are not supported by fBTcl_MainfR.  Those
  46. must be achieved by calling lower level functions in the Tcl library
  47. directly.
  48. The fBTcl_MainfR function has been offered by the Tcl library
  49. since release Tcl 7.4.  In older releases of Tcl, the Tcl library
  50. itself defined a function fBmainfR, but that lacks flexibility
  51. of embedding style and having a function fBmainfR in a library
  52. (particularly a shared library) causes problems on many systems.
  53. Having fBmainfR in the Tcl library would also make it hard to use
  54. Tcl in C++ programs, since C++ programs must have special C++
  55. fBmainfR functions.
  56. .PP
  57. Normally each shell application contains a small fBmainfR function
  58. that does nothing but invoke fBTcl_MainfR.
  59. fBTcl_MainfR then does all the work of creating and running a
  60. fBtclshfR-like application.
  61. .PP
  62. fBTcl_MainfR is not provided by the public interface of Tcl's
  63. stub library.  Programs that call fBTcl_MainfR must be linked
  64. against the standard Tcl library.  Extensions (stub-enabled or
  65. not) are not intended to call fBTcl_MainfR.
  66. .PP
  67. fBTcl_MainfR is not thread-safe.  It should only be called by
  68. a single master thread of a multi-threaded application.  This
  69. restriction is not a problem with normal use described above.
  70. .PP
  71. fBTcl_MainfR and therefore all applications based upon it, like
  72. fBtclshfR, use fBTcl_GetStdChannelfR to initialize the standard
  73. channels to their default values. See fBTcl_StandardChannelsfR for
  74. more information.
  75. .PP
  76. fBTcl_MainfR supports two modes of operation, depending on the
  77. values of fIargcfR and fIargvfR.  If fIargv[1]fR exists and
  78. does not begin with the character fI-fR, it is taken to be the
  79. name of a file containing a fIstartup scriptfR, which fBTcl_MainfR
  80. will attempt to evaluate.  Otherwise, fBTcl_MainfR will enter an
  81. interactive mode.
  82. .PP
  83. In either mode, fBTcl_MainfR will define in its master interpreter
  84. the Tcl variables fIargcfR, fIargvfR, fIargv0fR, and
  85. fItcl_interactivefR, as described in the documentation for fBtclshfR.
  86. .PP
  87. When it has finished its own initialization, but before it processes
  88. commands, fBTcl_MainfR calls the procedure given by the
  89. fIappInitProcfR argument.  This procedure provides a ``hook'' for
  90. the application to perform its own initialization of the interpreter
  91. created by fBTcl_MainfR, such as defining application-specific
  92. commands.  The procedure must have an interface that matches the
  93. type fBTcl_AppInitProcfR:
  94. .CS
  95. typedef int Tcl_AppInitProc(Tcl_Interp *fIinterpfR);
  96. .CE
  97. fIAppInitProcfR is almost always a pointer to fBTcl_AppInitfR; for more
  98. details on this procedure, see the documentation for fBTcl_AppInitfR.
  99. .PP
  100. When the fIappInitProcfR is finished, fBTcl_MainfR enters one
  101. of its two modes.  If a startup script has been provided, fBTcl_MainfR
  102. attempts to evaluate it.  Otherwise, interactive mode begins with
  103. examination of the variable fItcl_rcFileNamefR in the master
  104. interpreter.  If that variable exists and holds the name of a readable
  105. file, the contents of that file are evaluated in the master interpreter.
  106. Then interactive operations begin,
  107. with prompts and command evaluation results written to the standard
  108. output channel, and commands read from the standard input channel
  109. and then evaluated.  The prompts written to the standard output
  110. channel may be customized by defining the Tcl variables fItcl_prompt1fR
  111. and fItcl_prompt2fR as described in the documentation for fBtclshfR.
  112. The prompts and command evaluation results are written to the standard
  113. output channel only if the Tcl variable fItcl_interactivefR in the
  114. master interpreter holds a non-zero integer value.
  115. .PP
  116. .VS 8.4
  117. fBTcl_SetMainLoopfR allows setting an event loop procedure to be run.
  118. This allows, for example, Tk to be dynamically loaded and set its event
  119. loop.  The event loop will run following the startup script.  If you
  120. are in interactive mode, setting the main loop procedure will cause the
  121. prompt to become fileevent based and then the loop procedure is called.
  122. When the loop procedure returns in interactive mode, interactive operation
  123. will continue.
  124. The main loop procedure must have an interface that matches the type
  125. fBTcl_MainLoopProcfR:
  126. .CS
  127. typedef void Tcl_MainLoopProc(void);
  128. .CE
  129. .VE 8.4
  130. .PP
  131. fBTcl_MainfR does not return.  Normally a program based on
  132. fBTcl_MainfR will terminate when the fBexitfR command is
  133. evaluated.  In interactive mode, if an EOF or channel error
  134. is encountered on the standard input channel, then fBTcl_MainfR
  135. itself will evaluate the fBexitfR command after the main loop
  136. procedure (if any) returns.  In non-interactive mode, after
  137. fBTcl_MainfR evaluates the startup script, and the main loop
  138. procedure (if any) returns, fBTcl_MainfR will also evaluate
  139. the fBexitfR command.
  140. .SH "SEE ALSO"
  141. tclsh(1), Tcl_GetStdChannel(3), Tcl_StandardChannels(3), Tcl_AppInit(3),
  142. exit(n)
  143. .SH KEYWORDS
  144. application-specific initialization, command-line arguments, main program