Artifact [0adff0d77e]
Not logged in

Artifact 0adff0d77e8a55fb5cbbae9ad616ed2ac9892e7e:

Wiki page [Embedding Support] by hypnotoad 2014-09-02 21:38:40.
D 2014-09-02T21:38:40.005
L Embedding\sSupport
P 93366cc3392d2a73286ed428c0cc2c6774274be7
U hypnotoad
W 2810
<h1>Source Files</h1>
  *  [/finfo?name=generic/tclMain.c|tclMain.c]
  *  [/finfo?name=generic/tclPanic.c|tclPanic.c]
  *  [/finfo?name=unix/tclAppInit.c|tclAppInit.c]
  *  [/finfo?name=win/tclAppInit.c|tclAppInit.c]

<h1>Public Interface</h1>
  *  Tcl_SetStartupScript
  *  Tcl_GetStartupScript
  *  Tcl_SourceRCFile
  *  Tcl_Main
  *  Tcl_MainEx
  *  Tcl_SetMainLoop
  *  Tcl_SetPanicProc
  *  Tcl_PanicVA
  *  Tcl_Panic

<h1>Private Interface</h1>
  *  TclFullFinalizationRequested
  *  TclGetMainLoop

<h1>Directly Depends On Public Interface</h1>
  *  [Threads]
  *  [Object System and Fundamental Object Types]
  *  [Variable Commands and Interfaces]
  *  [Pathname Management]
  *  [Filesystem Access]
  *  [Channel System]
  *  [list Object Type]
  *  [Preservation]
  *  [Parsing and Evaluation]
  *  [interp]
  *  [Event Loops]
  *  [dict Object Type]
  *  [Linked C Variables]
  *  [history]
  *  <i>unistd.h</i>

<h1>Directly Depends On Private Interface of</h1>
  *  [Initialization, Library, Autoloader]
  *  [Pathname Management]
  *  [Object System and Fundamental Object Types]
  *  [Parsing and Evaluation]
  *  [Allocation]
  *  [Environment Variables]
 
<h1>The core_zip_vfs Patch</h1>
The [/timeline?r=core_zip_vfs|core_zip_vfs] branch adds the ability to mount a zip archive concatenated to the current executable as a virtual file system, capable of hosting both env(TCL_LIBRARY) and kick off
a bootloader (if a file called <i>main.tcl</i> is present).

This patch:
  * Adds  [/finfo?name=generic/tclZipVfs.c|tclZipVfs.c]
  * Modifies [/finfo?name=unix/tclAppInit.c|tclAppInit.c]
  * Modifies [/finfo?name=win/tclAppInit.c|tclAppInit.c]

To build a self-contained executable:
<verbatim>
cp tclsh mynewkit
zip mynewkit.zip main.tcl
cat mynewkit.zip >> mynewkit
./mynewkit
(Launches using the code embedded in main.tcl)
</verbatim>

<h1>Discussion</h1>

This has been considered a single module, but tclPanic.c is essentially a self contained
bit without dependencies, while tclMain.c depends on nearly everything.  Most other parts
of Tcl that claim a dependence on this module are really just callers of <b>Tcl_Panic</b>.

One wrinkle is the routine <b>tclWinDebugPanic</b> which is in multiple places,
tclWinError.c and tclWinFile.c.  There's also a great deal of <b>#ifdef</b> in tclPanic.c.
A restructuring into a generic caller of <b>TclpPanic</b> might be a path to increasing
simplicity and conventionality.

The routine <b>TclGetMainLoop</b> is another to note.  It appears in no header file.
It gets declared with <b>MODULE_SCOPE</b> but there doesn't appear to be any reason
it could not be a static function.

The routine <b>TclFullFinalizationRequested</b> probably should move into [Event Loops].
Z 36a9d082d7cbfbe6f25f9389757c63ee