Tcl Source Code

Hex Artifact Content
Login

Artifact cc1468ebad72ce7cf0217a555c20225920112119:

Attachment "setappexit3.diff" to ticket [649313ffff] added by mistachkin 2003-03-22 04:34:01.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74  Index: generic/t
0010: 63 6c 2e 64 65 63 6c 73 0a 3d 3d 3d 3d 3d 3d 3d  cl.decls.=======
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53  ============.RCS
0060: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f   file: /cvsroot/
0070: 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f  tcl/tcl/generic/
0080: 74 63 6c 2e 64 65 63 6c 73 2c 76 0a 72 65 74 72  tcl.decls,v.retr
0090: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20  ieving revision 
00a0: 31 2e 39 34 0a 64 69 66 66 20 2d 62 20 2d 75 20  1.94.diff -b -u 
00b0: 2d 72 31 2e 39 34 20 74 63 6c 2e 64 65 63 6c 73  -r1.94 tcl.decls
00c0: 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c  .--- generic/tcl
00d0: 2e 64 65 63 6c 73 09 33 31 20 41 75 67 20 32 30  .decls.31 Aug 20
00e0: 30 32 20 30 36 3a 30 39 3a 34 35 20 2d 30 30 30  02 06:09:45 -000
00f0: 30 09 31 2e 39 34 0a 2b 2b 2b 20 67 65 6e 65 72  0.1.94.+++ gener
0100: 69 63 2f 74 63 6c 2e 64 65 63 6c 73 09 32 31 20  ic/tcl.decls.21 
0110: 4d 61 72 20 32 30 30 33 20 32 31 3a 30 36 3a 34  Mar 2003 21:06:4
0120: 32 20 2d 30 30 30 30 0a 40 40 20 2d 31 37 35 34  2 -0000.@@ -1754
0130: 2c 36 20 2b 31 37 35 34 2c 31 31 20 40 40 0a 20  ,6 +1754,11 @@. 
0140: 09 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c  .    Tcl_Channel
0150: 54 79 70 65 20 2a 63 68 61 6e 54 79 70 65 50 74  Type *chanTypePt
0160: 72 29 0a 20 7d 0a 0a 2b 23 20 4e 65 77 20 65 78  r). }..+# New ex
0170: 70 6f 72 74 20 66 6f 72 20 63 75 73 74 6f 6d 20  port for custom 
0180: 61 70 70 20 65 78 69 74 20 68 61 6e 64 6c 69 6e  app exit handlin
0190: 67 0a 2b 64 65 63 6c 61 72 65 20 34 39 34 20 67  g.+declare 494 g
01a0: 65 6e 65 72 69 63 20 7b 0a 2b 20 20 20 20 54 63  eneric {.+    Tc
01b0: 6c 5f 45 78 69 74 50 72 6f 63 20 2a 54 63 6c 5f  l_ExitProc *Tcl_
01c0: 53 65 74 45 78 69 74 50 72 6f 63 28 54 63 6c 5f  SetExitProc(Tcl_
01d0: 45 78 69 74 50 72 6f 63 20 2a 70 72 6f 63 29 0a  ExitProc *proc).
01e0: 2b 7d 0a 2b 0a 20 23 23 23 23 23 23 23 23 23 23  +}.+. ##########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 0a 0a 20 23 20 44 65 66 69 6e 65 20  ####.. # Define 
0240: 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 73 70 65  the platform spe
0250: 63 69 66 69 63 20 70 75 62 6c 69 63 20 54 63 6c  cific public Tcl
0260: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65   interface.  The
0270: 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  se functions are
0280: 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f  .Index: generic/
0290: 74 63 6c 44 65 63 6c 73 2e 68 0a 3d 3d 3d 3d 3d  tclDecls.h.=====
02a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
02b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
02c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
02d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52  ==============.R
02e0: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f  CS file: /cvsroo
02f0: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69  t/tcl/tcl/generi
0300: 63 2f 74 63 6c 44 65 63 6c 73 2e 68 2c 76 0a 72  c/tclDecls.h,v.r
0310: 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69  etrieving revisi
0320: 6f 6e 20 31 2e 39 33 0a 64 69 66 66 20 2d 62 20  on 1.93.diff -b 
0330: 2d 75 20 2d 72 31 2e 39 33 20 74 63 6c 44 65 63  -u -r1.93 tclDec
0340: 6c 73 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63  ls.h.--- generic
0350: 2f 74 63 6c 44 65 63 6c 73 2e 68 09 35 20 41 75  /tclDecls.h.5 Au
0360: 67 20 32 30 30 32 20 31 35 3a 30 31 3a 30 34 20  g 2002 15:01:04 
0370: 2d 30 30 30 30 09 31 2e 39 33 0a 2b 2b 2b 20 67  -0000.1.93.+++ g
0380: 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c 73 2e  eneric/tclDecls.
0390: 68 09 32 31 20 4d 61 72 20 32 30 30 33 20 32 31  h.21 Mar 2003 21
03a0: 3a 30 36 3a 34 38 20 2d 30 30 30 30 0a 40 40 20  :06:48 -0000.@@ 
03b0: 2d 31 35 36 34 2c 36 20 2b 31 35 36 34 2c 39 20  -1564,6 +1564,9 
03c0: 40 40 0a 20 2f 2a 20 34 39 33 20 2a 2f 0a 20 45  @@. /* 493 */. E
03d0: 58 54 45 52 4e 20 54 63 6c 5f 44 72 69 76 65 72  XTERN Tcl_Driver
03e0: 57 69 64 65 53 65 65 6b 50 72 6f 63 20 2a 20 54  WideSeekProc * T
03f0: 63 6c 5f 43 68 61 6e 6e 65 6c 57 69 64 65 53 65  cl_ChannelWideSe
0400: 65 6b 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47  ekProc _ANSI_ARG
0410: 53 5f 28 28 0a 20 09 09 09 09 54 63 6c 5f 43 68  S_((. ....Tcl_Ch
0420: 61 6e 6e 65 6c 54 79 70 65 20 2a 20 63 68 61 6e  annelType * chan
0430: 54 79 70 65 50 74 72 29 29 3b 0a 2b 2f 2a 20 34  TypePtr));.+/* 4
0440: 39 34 20 2a 2f 0a 2b 45 58 54 45 52 4e 20 54 63  94 */.+EXTERN Tc
0450: 6c 5f 45 78 69 74 50 72 6f 63 20 2a 20 20 54 63  l_ExitProc *  Tc
0460: 6c 5f 53 65 74 45 78 69 74 50 72 6f 63 20 5f 41  l_SetExitProc _A
0470: 4e 53 49 5f 41 52 47 53 5f 28 28 0a 2b 20 20 20  NSI_ARGS_((.+   
0480: 20 20 20 20 20 54 63 6c 5f 45 78 69 74 50 72 6f       Tcl_ExitPro
0490: 63 20 2a 70 72 6f 63 29 29 3b 0a 0a 20 74 79 70  c *proc));.. typ
04a0: 65 64 65 66 20 73 74 72 75 63 74 20 54 63 6c 53  edef struct TclS
04b0: 74 75 62 48 6f 6f 6b 73 20 7b 0a 20 20 20 20 20  tubHooks {.     
04c0: 73 74 72 75 63 74 20 54 63 6c 50 6c 61 74 53 74  struct TclPlatSt
04d0: 75 62 73 20 2a 74 63 6c 50 6c 61 74 53 74 75 62  ubs *tclPlatStub
04e0: 73 3b 0a 40 40 20 2d 32 31 31 37 2c 36 20 2b 32  s;.@@ -2117,6 +2
04f0: 31 32 30 2c 37 20 40 40 0a 20 20 20 20 20 54 63  120,7 @@.     Tc
0500: 6c 5f 57 69 64 65 49 6e 74 20 28 2a 74 63 6c 5f  l_WideInt (*tcl_
0510: 53 65 65 6b 29 20 5f 41 4e 53 49 5f 41 52 47 53  Seek) _ANSI_ARGS
0520: 5f 28 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63  _((Tcl_Channel c
0530: 68 61 6e 2c 20 54 63 6c 5f 57 69 64 65 49 6e 74  han, Tcl_WideInt
0540: 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 6d 6f 64   offset, int mod
0550: 65 29 29 3b 20 2f 2a 20 34 39 31 20 2a 2f 0a 20  e)); /* 491 */. 
0560: 20 20 20 20 54 63 6c 5f 57 69 64 65 49 6e 74 20      Tcl_WideInt 
0570: 28 2a 74 63 6c 5f 54 65 6c 6c 29 20 5f 41 4e 53  (*tcl_Tell) _ANS
0580: 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 43 68 61  I_ARGS_((Tcl_Cha
0590: 6e 6e 65 6c 20 63 68 61 6e 29 29 3b 20 2f 2a 20  nnel chan)); /* 
05a0: 34 39 32 20 2a 2f 0a 20 20 20 20 20 54 63 6c 5f  492 */.     Tcl_
05b0: 44 72 69 76 65 72 57 69 64 65 53 65 65 6b 50 72  DriverWideSeekPr
05c0: 6f 63 20 2a 20 28 2a 74 63 6c 5f 43 68 61 6e 6e  oc * (*tcl_Chann
05d0: 65 6c 57 69 64 65 53 65 65 6b 50 72 6f 63 29 20  elWideSeekProc) 
05e0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c  _ANSI_ARGS_((Tcl
05f0: 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a 20 63  _ChannelType * c
0600: 68 61 6e 54 79 70 65 50 74 72 29 29 3b 20 2f 2a  hanTypePtr)); /*
0610: 20 34 39 33 20 2a 2f 0a 2b 20 20 20 20 54 63 6c   493 */.+    Tcl
0620: 5f 45 78 69 74 50 72 6f 63 20 2a 20 28 2a 54 63  _ExitProc * (*Tc
0630: 6c 5f 53 65 74 45 78 69 74 50 72 6f 63 29 20 5f  l_SetExitProc) _
0640: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f  ANSI_ARGS_((Tcl_
0650: 45 78 69 74 50 72 6f 63 20 2a 70 72 6f 63 29 29  ExitProc *proc))
0660: 3b 20 2f 2a 20 34 39 34 20 2a 2f 0a 20 7d 20 54  ; /* 494 */. } T
0670: 63 6c 53 74 75 62 73 3b 0a 0a 20 23 69 66 64 65  clStubs;.. #ifde
0680: 66 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0a 40 40  f __cplusplus.@@
0690: 20 2d 34 31 33 32 2c 36 20 2b 34 31 33 36 2c 31   -4132,6 +4136,1
06a0: 30 20 40 40 0a 20 23 69 66 6e 64 65 66 20 54 63  0 @@. #ifndef Tc
06b0: 6c 5f 43 68 61 6e 6e 65 6c 57 69 64 65 53 65 65  l_ChannelWideSee
06c0: 6b 50 72 6f 63 0a 20 23 64 65 66 69 6e 65 20 54  kProc. #define T
06d0: 63 6c 5f 43 68 61 6e 6e 65 6c 57 69 64 65 53 65  cl_ChannelWideSe
06e0: 65 6b 50 72 6f 63 20 5c 0a 20 09 28 74 63 6c 53  ekProc \. .(tclS
06f0: 74 75 62 73 50 74 72 2d 3e 74 63 6c 5f 43 68 61  tubsPtr->tcl_Cha
0700: 6e 6e 65 6c 57 69 64 65 53 65 65 6b 50 72 6f 63  nnelWideSeekProc
0710: 29 20 2f 2a 20 34 39 33 20 2a 2f 0a 2b 23 65 6e  ) /* 493 */.+#en
0720: 64 69 66 0a 2b 23 69 66 6e 64 65 66 20 54 63 6c  dif.+#ifndef Tcl
0730: 5f 53 65 74 45 78 69 74 50 72 6f 63 0a 2b 23 64  _SetExitProc.+#d
0740: 65 66 69 6e 65 20 54 63 6c 5f 53 65 74 45 78 69  efine Tcl_SetExi
0750: 74 50 72 6f 63 20 5c 0a 2b 09 28 74 63 6c 53 74  tProc \.+.(tclSt
0760: 75 62 73 50 74 72 2d 3e 54 63 6c 5f 53 65 74 45  ubsPtr->Tcl_SetE
0770: 78 69 74 50 72 6f 63 29 20 2f 2a 20 34 39 34 20  xitProc) /* 494 
0780: 2a 2f 0a 20 23 65 6e 64 69 66 0a 0a 20 23 65 6e  */. #endif.. #en
0790: 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 28 55  dif /* defined(U
07a0: 53 45 5f 54 43 4c 5f 53 54 55 42 53 29 20 26 26  SE_TCL_STUBS) &&
07b0: 20 21 64 65 66 69 6e 65 64 28 55 53 45 5f 54 43   !defined(USE_TC
07c0: 4c 5f 53 54 55 42 5f 50 52 4f 43 53 29 20 2a 2f  L_STUB_PROCS) */
07d0: 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f  .Index: generic/
07e0: 74 63 6c 45 76 65 6e 74 2e 63 0a 3d 3d 3d 3d 3d  tclEvent.c.=====
07f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0800: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52  ==============.R
0830: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f  CS file: /cvsroo
0840: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69  t/tcl/tcl/generi
0850: 63 2f 74 63 6c 45 76 65 6e 74 2e 63 2c 76 0a 72  c/tclEvent.c,v.r
0860: 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69  etrieving revisi
0870: 6f 6e 20 31 2e 32 38 0a 64 69 66 66 20 2d 62 20  on 1.28.diff -b 
0880: 2d 75 20 2d 72 31 2e 32 38 20 74 63 6c 45 76 65  -u -r1.28 tclEve
0890: 6e 74 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 69 63  nt.c.--- generic
08a0: 2f 74 63 6c 45 76 65 6e 74 2e 63 09 32 32 20 46  /tclEvent.c.22 F
08b0: 65 62 20 32 30 30 33 20 30 39 3a 32 33 3a 31 36  eb 2003 09:23:16
08c0: 20 2d 30 30 30 30 09 31 2e 32 38 0a 2b 2b 2b 20   -0000.1.28.+++ 
08d0: 67 65 6e 65 72 69 63 2f 74 63 6c 45 76 65 6e 74  generic/tclEvent
08e0: 2e 63 09 32 31 20 4d 61 72 20 32 30 30 33 20 32  .c.21 Mar 2003 2
08f0: 31 3a 30 36 3a 34 39 20 2d 30 30 30 30 0a 40 40  1:06:49 -0000.@@
0900: 20 2d 38 38 2c 36 20 2b 38 38 2c 31 34 20 40 40   -88,6 +88,14 @@
0910: 0a 20 73 74 61 74 69 63 20 69 6e 74 20 69 6e 46  . static int inF
0920: 69 6e 61 6c 69 7a 65 20 3d 20 30 3b 0a 20 73 74  inalize = 0;. st
0930: 61 74 69 63 20 69 6e 74 20 73 75 62 73 79 73 74  atic int subsyst
0940: 65 6d 73 49 6e 69 74 69 61 6c 69 7a 65 64 20 3d  emsInitialized =
0950: 20 30 3b 0a 0a 2b 2f 2a 0a 2b 20 2a 20 54 68 69   0;..+/*.+ * Thi
0960: 73 20 76 61 72 69 61 62 6c 65 20 63 6f 6e 74 61  s variable conta
0970: 69 6e 73 20 74 68 65 20 61 70 70 6c 69 63 61 74  ins the applicat
0980: 69 6f 6e 20 77 69 64 65 20 65 78 69 74 20 68 61  ion wide exit ha
0990: 6e 64 6c 65 72 2e 20 20 49 74 20 77 69 6c 6c 20  ndler.  It will 
09a0: 62 65 0a 2b 20 2a 20 63 61 6c 6c 65 64 20 62 79  be.+ * called by
09b0: 20 54 63 6c 5f 45 78 69 74 20 69 6e 73 74 65 61   Tcl_Exit instea
09c0: 64 20 6f 66 20 74 68 65 20 43 2d 72 75 6e 74 69  d of the C-runti
09d0: 6d 65 20 65 78 69 74 20 69 66 20 74 68 69 73 20  me exit if this 
09e0: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 0a  variable is set.
09f0: 2b 20 2a 20 74 6f 20 61 20 6e 6f 6e 2d 4e 55 4c  + * to a non-NUL
0a00: 4c 20 76 61 6c 75 65 2e 0a 2b 20 2a 2f 0a 2b 0a  L value..+ */.+.
0a10: 2b 73 74 61 74 69 63 20 54 63 6c 5f 45 78 69 74  +static Tcl_Exit
0a20: 50 72 6f 63 20 2a 61 70 70 45 78 69 74 50 74 72  Proc *appExitPtr
0a30: 20 3d 20 4e 55 4c 4c 3b 0a 2b 0a 20 74 79 70 65   = NULL;.+. type
0a40: 64 65 66 20 73 74 72 75 63 74 20 54 68 72 65 61  def struct Threa
0a50: 64 53 70 65 63 69 66 69 63 44 61 74 61 20 7b 0a  dSpecificData {.
0a60: 20 20 20 20 20 45 78 69 74 48 61 6e 64 6c 65 72       ExitHandler
0a70: 20 2a 66 69 72 73 74 45 78 69 74 50 74 72 3b 20   *firstExitPtr; 
0a80: 20 2f 2a 20 46 69 72 73 74 20 69 6e 20 6c 69 73   /* First in lis
0a90: 74 20 6f 66 20 61 6c 6c 20 65 78 69 74 20 68 61  t of all exit ha
0aa0: 6e 64 6c 65 72 73 20 66 6f 72 0a 20 09 09 09 09  ndlers for. ....
0ab0: 20 2a 20 74 68 69 73 20 74 68 72 65 61 64 2e 20   * this thread. 
0ac0: 2a 2f 0a 40 40 20 2d 35 34 32 2c 36 20 2b 35 35  */.@@ -542,6 +55
0ad0: 30 2c 33 38 20 40 40 0a 20 2f 2a 0a 20 20 2a 2d  0,38 @@. /*.  *-
0ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b20: 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2b 20 2a 20 54 63  -----.  *.+ * Tc
0b30: 6c 5f 53 65 74 45 78 69 74 50 72 6f 63 20 2d 2d  l_SetExitProc --
0b40: 0a 2b 20 2a 0a 2b 20 2a 09 54 68 69 73 20 70 72  .+ *.+ *.This pr
0b50: 6f 63 65 64 75 72 65 20 73 65 74 73 20 74 68 65  ocedure sets the
0b60: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 77 69 64   application wid
0b70: 65 20 65 78 69 74 20 68 61 6e 64 6c 65 72 20 74  e exit handler t
0b80: 68 61 74 20 77 69 6c 6c 20 62 65 0a 2b 20 2a 20  hat will be.+ * 
0b90: 20 63 61 6c 6c 65 64 20 62 79 20 54 63 6c 5f 45   called by Tcl_E
0ba0: 78 69 74 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  xit in place of 
0bb0: 74 68 65 20 43 2d 72 75 6e 74 69 6d 65 20 65 78  the C-runtime ex
0bc0: 69 74 2e 20 20 49 66 20 74 68 65 0a 2b 20 2a 20  it.  If the.+ * 
0bd0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 77 69 64   application wid
0be0: 65 20 65 78 69 74 20 68 61 6e 64 6c 65 72 20 69  e exit handler i
0bf0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 43 2d 72 75  s NULL, the C-ru
0c00: 6e 74 69 6d 65 20 65 78 69 74 20 77 69 6c 6c 20  ntime exit will 
0c10: 62 65 0a 2b 20 2a 20 20 75 73 65 64 20 69 6e 73  be.+ *  used ins
0c20: 74 65 61 64 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65  tead..+ *.+ * Re
0c30: 73 75 6c 74 73 3a 0a 2b 20 2a 09 54 68 65 20 70  sults:.+ *.The p
0c40: 72 65 76 69 6f 75 73 6c 79 20 73 65 74 20 61 70  reviously set ap
0c50: 70 6c 69 63 61 74 69 6f 6e 20 77 69 64 65 20 65  plication wide e
0c60: 78 69 74 20 68 61 6e 64 6c 65 72 2e 0a 2b 20 2a  xit handler..+ *
0c70: 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  .+ * Side effect
0c80: 73 3a 0a 2b 20 2a 09 53 65 74 73 20 74 68 65 20  s:.+ *.Sets the 
0c90: 61 70 70 6c 69 63 61 74 69 6f 6e 20 77 69 64 65  application wide
0ca0: 20 65 78 69 74 20 68 61 6e 64 6c 65 72 20 74 6f   exit handler to
0cb0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
0cc0: 61 6c 75 65 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d  alue..+ *.+ *---
0cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d10: 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 54 63 6c 5f 45 78  ---.+ */.+Tcl_Ex
0d20: 69 74 50 72 6f 63 20 2a 0a 2b 54 63 6c 5f 53 65  itProc *.+Tcl_Se
0d30: 74 45 78 69 74 50 72 6f 63 28 70 72 6f 63 29 0a  tExitProc(proc).
0d40: 2b 20 20 20 20 54 63 6c 5f 45 78 69 74 50 72 6f  +    Tcl_ExitPro
0d50: 63 20 2a 70 72 6f 63 3b 20 2f 2a 20 6e 65 77 20  c *proc; /* new 
0d60: 65 78 69 74 20 68 61 6e 64 6c 65 72 20 66 6f 72  exit handler for
0d70: 20 61 70 70 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a   app or NULL */.
0d80: 2b 7b 0a 2b 20 20 20 20 54 63 6c 5f 45 78 69 74  +{.+    Tcl_Exit
0d90: 50 72 6f 63 20 2a 70 72 65 76 45 78 69 74 50 72  Proc *prevExitPr
0da0: 6f 63 3b 20 2f 2a 20 72 65 74 75 72 6e 20 70 72  oc; /* return pr
0db0: 65 76 20 65 78 69 74 20 68 61 6e 64 6c 65 72 20  ev exit handler 
0dc0: 74 6f 20 63 61 6c 6c 65 72 20 2a 2f 0a 2b 0a 2b  to caller */.+.+
0dd0: 20 20 20 20 54 63 6c 5f 4d 75 74 65 78 4c 6f 63      Tcl_MutexLoc
0de0: 6b 28 26 65 78 69 74 4d 75 74 65 78 29 3b 0a 2b  k(&exitMutex);.+
0df0: 20 20 20 20 70 72 65 76 45 78 69 74 50 72 6f 63      prevExitProc
0e00: 20 3d 20 61 70 70 45 78 69 74 50 74 72 3b 20 2f   = appExitPtr; /
0e10: 2a 20 67 65 74 20 6f 6c 64 20 61 70 70 20 65 78  * get old app ex
0e20: 69 74 20 70 74 72 20 2a 2f 0a 2b 20 20 20 20 61  it ptr */.+    a
0e30: 70 70 45 78 69 74 50 74 72 20 3d 20 70 72 6f 63  ppExitPtr = proc
0e40: 3b 20 2f 2a 20 73 65 74 20 6e 65 77 20 61 70 70  ; /* set new app
0e50: 20 65 78 69 74 20 70 74 72 20 2a 2f 0a 2b 20 20   exit ptr */.+  
0e60: 20 20 54 63 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63    Tcl_MutexUnloc
0e70: 6b 28 26 65 78 69 74 4d 75 74 65 78 29 3b 0a 2b  k(&exitMutex);.+
0e80: 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 70 72 65  .+    return pre
0e90: 76 45 78 69 74 50 72 6f 63 3b 0a 2b 7d 0a 2b 0c  vExitProc;.+}.+.
0ea0: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .+/*.+ *--------
0eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b  --------------.+
0ef0: 20 2a 0a 20 20 2a 20 54 63 6c 5f 45 78 69 74 20   *.  * Tcl_Exit 
0f00: 2d 2d 0a 20 20 2a 0a 20 20 2a 09 54 68 69 73 20  --.  *.  *.This 
0f10: 70 72 6f 63 65 64 75 72 65 20 69 73 20 63 61 6c  procedure is cal
0f20: 6c 65 64 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  led to terminate
0f30: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
0f40: 2e 0a 40 40 20 2d 35 36 31 2c 38 20 2b 36 30 31  ..@@ -561,8 +601
0f50: 2c 32 35 20 40 40 0a 20 20 20 20 20 69 6e 74 20  ,25 @@.     int 
0f60: 73 74 61 74 75 73 3b 09 09 09 2f 2a 20 45 78 69  status;.../* Exi
0f70: 74 20 73 74 61 74 75 73 20 66 6f 72 20 61 70 70  t status for app
0f80: 6c 69 63 61 74 69 6f 6e 3b 20 20 74 79 70 69 63  lication;  typic
0f90: 61 6c 6c 79 0a 20 09 09 09 09 20 2a 20 30 20 66  ally. .... * 0 f
0fa0: 6f 72 20 6e 6f 72 6d 61 6c 20 72 65 74 75 72 6e  or normal return
0fb0: 2c 20 31 20 66 6f 72 20 65 72 72 6f 72 20 72 65  , 1 for error re
0fc0: 74 75 72 6e 2e 20 2a 2f 0a 20 7b 0a 2b 20 20 20  turn. */. {.+   
0fd0: 20 54 63 6c 5f 45 78 69 74 50 72 6f 63 20 2a 63   Tcl_ExitProc *c
0fe0: 75 72 72 65 6e 74 41 70 70 45 78 69 74 50 74 72  urrentAppExitPtr
0ff0: 3b 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 74  ;.+.+    Tcl_Mut
1000: 65 78 4c 6f 63 6b 28 26 65 78 69 74 4d 75 74 65  exLock(&exitMute
1010: 78 29 3b 0a 2b 20 20 20 20 63 75 72 72 65 6e 74  x);.+    current
1020: 41 70 70 45 78 69 74 50 74 72 20 3d 20 61 70 70  AppExitPtr = app
1030: 45 78 69 74 50 74 72 3b 0a 2b 20 20 20 20 54 63  ExitPtr;.+    Tc
1040: 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 65  l_MutexUnlock(&e
1050: 78 69 74 4d 75 74 65 78 29 3b 0a 2b 0a 2b 20 20  xitMutex);.+.+  
1060: 20 20 69 66 20 28 63 75 72 72 65 6e 74 41 70 70    if (currentApp
1070: 45 78 69 74 50 74 72 29 20 7b 0a 2b 20 20 20 20  ExitPtr) {.+    
1080: 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
1090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
10c0: 2b 20 20 20 20 20 20 2f 2a 20 57 41 52 4e 49 4e  +      /* WARNIN
10d0: 47 3a 20 54 68 69 73 20 63 6f 64 65 20 53 48 4f  G: This code SHO
10e0: 55 4c 44 20 4e 4f 54 20 72 65 74 75 72 6e 2c 20  ULD NOT return, 
10f0: 61 73 20 74 68 65 72 65 20 69 73 20 63 6f 64 65  as there is code
1100: 20 20 2a 2f 0a 2b 20 20 20 20 20 20 2f 2a 20 20    */.+      /*  
1110: 20 20 20 20 20 20 20 20 74 68 61 74 20 64 65 70          that dep
1120: 65 6e 64 73 20 6f 6e 20 54 63 6c 5f 45 78 69 74  ends on Tcl_Exit
1130: 20 6e 65 76 65 72 20 72 65 74 75 72 6e 69 6e 67   never returning
1140: 2e 20 20 20 20 20 20 2a 2f 0a 2b 20 20 20 20 20  .      */.+     
1150: 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
1160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 2b  *************/.+
1190: 20 20 20 20 20 20 63 75 72 72 65 6e 74 41 70 70        currentApp
11a0: 45 78 69 74 50 74 72 28 28 43 6c 69 65 6e 74 44  ExitPtr((ClientD
11b0: 61 74 61 29 20 73 74 61 74 75 73 29 3b 0a 2b 20  ata) status);.+ 
11c0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 20 20 20     } else {.+   
11d0: 20 20 20 2f 2a 20 75 73 65 20 64 65 66 61 75 6c     /* use defaul
11e0: 74 20 68 61 6e 64 6c 69 6e 67 20 2a 2f 0a 20 20  t handling */.  
11f0: 20 20 20 54 63 6c 5f 46 69 6e 61 6c 69 7a 65 28     Tcl_Finalize(
1200: 29 3b 0a 20 20 20 20 20 54 63 6c 70 45 78 69 74  );.     TclpExit
1210: 28 73 74 61 74 75 73 29 3b 0a 2b 20 20 20 20 7d  (status);.+    }
1220: 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 50 61 6e 69  .+.+    Tcl_Pani
1230: 63 20 28 22 65 78 69 74 50 72 6f 63 20 72 65 74  c ("exitProc ret
1240: 75 72 6e 65 64 21 22 29 3b 0a 20 7d 0a 20 0c 0a  urned!");. }. ..
1250: 20 2f 2a 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72   /*.Index: gener
1260: 69 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e 63  ic/tclStubInit.c
1270: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .===============
1280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
12a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
12b0: 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f  ====.RCS file: /
12c0: 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f  cvsroot/tcl/tcl/
12d0: 67 65 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49  generic/tclStubI
12e0: 6e 69 74 2e 63 2c 76 0a 72 65 74 72 69 65 76 69  nit.c,v.retrievi
12f0: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 38 30  ng revision 1.80
1300: 0a 64 69 66 66 20 2d 62 20 2d 75 20 2d 72 31 2e  .diff -b -u -r1.
1310: 38 30 20 74 63 6c 53 74 75 62 49 6e 69 74 2e 63  80 tclStubInit.c
1320: 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c  .--- generic/tcl
1330: 53 74 75 62 49 6e 69 74 2e 63 09 32 31 20 4d 61  StubInit.c.21 Ma
1340: 72 20 32 30 30 33 20 30 33 3a 32 33 3a 32 34 20  r 2003 03:23:24 
1350: 2d 30 30 30 30 09 31 2e 38 30 0a 2b 2b 2b 20 67  -0000.1.80.+++ g
1360: 65 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49 6e  eneric/tclStubIn
1370: 69 74 2e 63 09 32 31 20 4d 61 72 20 32 30 30 33  it.c.21 Mar 2003
1380: 20 32 31 3a 30 36 3a 35 30 20 2d 30 30 30 30 0a   21:06:50 -0000.
1390: 40 40 20 2d 39 32 35 2c 36 20 2b 39 32 35 2c 37  @@ -925,6 +925,7
13a0: 20 40 40 0a 20 20 20 20 20 54 63 6c 5f 53 65 65   @@.     Tcl_See
13b0: 6b 2c 20 2f 2a 20 34 39 31 20 2a 2f 0a 20 20 20  k, /* 491 */.   
13c0: 20 20 54 63 6c 5f 54 65 6c 6c 2c 20 2f 2a 20 34    Tcl_Tell, /* 4
13d0: 39 32 20 2a 2f 0a 20 20 20 20 20 54 63 6c 5f 43  92 */.     Tcl_C
13e0: 68 61 6e 6e 65 6c 57 69 64 65 53 65 65 6b 50 72  hannelWideSeekPr
13f0: 6f 63 2c 20 2f 2a 20 34 39 33 20 2a 2f 0a 2b 20  oc, /* 493 */.+ 
1400: 20 20 20 54 63 6c 5f 53 65 74 45 78 69 74 50 72     Tcl_SetExitPr
1410: 6f 63 2c 20 2f 2a 20 34 39 34 20 2a 2f 0a 20 7d  oc, /* 494 */. }
1420: 3b 0a 0a 20 2f 2a 20 21 45 4e 44 21 3a 20 44 6f  ;.. /* !END!: Do
1430: 20 6e 6f 74 20 65 64 69 74 20 61 62 6f 76 65 20   not edit above 
1440: 74 68 69 73 20 6c 69 6e 65 2e 20 2a 2f 0a        this line. */.