Tcl Source Code

Hex Artifact Content
Login

Artifact f8abee7388bdfb5e4f53940d808c19079b97ef33:

Attachment "tcl8.4_all_002.diff" to ticket [875701ffff] added by andreas_kupries 2005-01-28 05:51:23.
0000: 49 6e 64 65 78 3a 20 43 68 61 6e 67 65 4c 6f 67  Index: ChangeLog
0010: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .===============
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 0a 52 43 53 20 66 69 6c 65 3a 20 2f  ====.RCS file: /
0060: 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f  cvsroot/tcl/tcl/
0070: 43 68 61 6e 67 65 4c 6f 67 2c 76 0a 72 65 74 72  ChangeLog,v.retr
0080: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20  ieving revision 
0090: 31 2e 31 34 35 33 2e 32 2e 33 39 38 0a 64 69 66  1.1453.2.398.dif
00a0: 66 20 2d 77 20 2d 75 20 2d 72 31 2e 31 34 35 33  f -w -u -r1.1453
00b0: 2e 32 2e 33 39 38 20 43 68 61 6e 67 65 4c 6f 67  .2.398 ChangeLog
00c0: 0a 2d 2d 2d 20 43 68 61 6e 67 65 4c 6f 67 09 32  .--- ChangeLog.2
00d0: 35 20 4a 61 6e 20 32 30 30 35 20 31 37 3a 35 38  5 Jan 2005 17:58
00e0: 3a 33 38 20 2d 30 30 30 30 09 31 2e 31 34 35 33  :38 -0000.1.1453
00f0: 2e 32 2e 33 39 38 0a 2b 2b 2b 20 43 68 61 6e 67  .2.398.+++ Chang
0100: 65 4c 6f 67 09 32 37 20 4a 61 6e 20 32 30 30 35  eLog.27 Jan 2005
0110: 20 32 32 3a 34 39 3a 31 38 20 2d 30 30 30 30 0a   22:49:18 -0000.
0120: 40 40 20 2d 31 2c 33 20 2b 31 2c 32 36 20 40 40  @@ -1,3 +1,26 @@
0130: 0a 2b 32 30 30 35 2d 30 31 2d 32 37 20 20 41 6e  .+2005-01-27  An
0140: 64 72 65 61 73 20 4b 75 70 72 69 65 73 20 3c 61  dreas Kupries <a
0150: 6e 64 72 65 61 73 6b 40 61 63 74 69 76 65 73 74  ndreask@activest
0160: 61 74 65 2e 63 6f 6d 3e 0a 2b 0a 2b 09 54 49 50  ate.com>.+.+.TIP
0170: 23 32 31 38 20 49 4d 50 4c 45 4d 45 4e 54 41 54  #218 IMPLEMENTAT
0180: 49 4f 4e 0a 2b 0a 2b 09 2a 20 67 65 6e 65 72 69  ION.+.+.* generi
0190: 63 2f 74 63 6c 44 65 63 6c 73 2e 68 3a 09 52 65  c/tclDecls.h:.Re
01a0: 67 65 6e 65 72 61 74 65 64 20 66 72 6f 6d 20 74  generated from t
01b0: 63 6c 2e 64 65 63 6c 73 2e 0a 2b 09 2a 20 67 65  cl.decls..+.* ge
01c0: 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49 6e 69  neric/tclStubIni
01d0: 74 2e 63 3a 09 0a 2b 0a 2b 09 2a 20 64 6f 63 2f  t.c:..+.+.* doc/
01e0: 43 72 74 43 68 61 6e 6e 65 6c 2e 33 3a 09 44 6f  CrtChannel.3:.Do
01f0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 65  cumentation of e
0200: 78 74 65 6e 64 65 64 20 41 50 49 2c 0a 2b 09 2a  xtended API,.+.*
0210: 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e 64 65 63   generic/tcl.dec
0220: 6c 73 3a 09 65 78 74 65 6e 64 65 64 20 74 65 73  ls:.extended tes
0230: 74 73 75 69 74 65 2c 20 61 6e 64 0a 2b 09 2a 20  tsuite, and.+.* 
0240: 67 65 6e 65 72 69 63 2f 74 63 6c 2e 68 3a 09 69  generic/tcl.h:.i
0250: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 52  mplementation. R
0260: 65 6d 6f 76 61 6c 20 6f 66 20 6f 6c 64 0a 2b 09  emoval of old.+.
0270: 2a 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 4f 2e  * generic/tclIO.
0280: 63 3a 09 64 72 69 76 65 72 2d 73 70 65 63 69 66  c:.driver-specif
0290: 69 63 20 54 63 6c 70 43 75 74 2f 53 70 6c 69 63  ic TclpCut/Splic
02a0: 65 0a 2b 09 2a 20 67 65 6e 65 72 69 63 2f 74 63  e.+.* generic/tc
02b0: 6c 49 6e 74 2e 68 3a 09 66 75 6e 63 74 69 6f 6e  lInt.h:.function
02c0: 73 2e 20 52 65 70 6c 61 63 65 64 20 77 69 74 68  s. Replaced with
02d0: 20 67 65 6e 65 72 69 63 0a 2b 09 2a 20 74 65 73   generic.+.* tes
02e0: 74 73 2f 69 6f 2e 74 65 73 74 3a 09 74 68 72 65  ts/io.test:.thre
02f0: 61 64 2d 61 63 74 69 6f 6e 20 63 61 6c 6c 73 20  ad-action calls 
0300: 74 68 72 6f 75 67 68 20 74 68 65 0a 2b 09 2a 20  through the.+.* 
0310: 75 6e 69 78 2f 74 63 6c 55 6e 69 78 43 68 61 6e  unix/tclUnixChan
0320: 2e 63 3a 09 6e 65 77 20 68 6f 6f 6b 73 2e 20 55  .c:.new hooks. U
0330: 70 64 61 74 65 20 6f 66 20 61 6c 6c 20 62 75 69  pdate of all bui
0340: 6c 74 69 6e 0a 2b 09 2a 20 75 6e 69 78 2f 74 63  ltin.+.* unix/tc
0350: 6c 55 6e 69 78 50 69 70 65 2e 63 3a 09 63 68 61  lUnixPipe.c:.cha
0360: 6e 6e 65 6c 20 64 72 69 76 65 72 73 20 74 6f 20  nnel drivers to 
0370: 76 65 72 73 69 6f 6e 20 34 2e 0a 2b 09 2a 20 75  version 4..+.* u
0380: 6e 69 78 2f 74 63 6c 55 6e 69 78 53 6f 63 6b 2e  nix/tclUnixSock.
0390: 63 3a 09 57 69 6e 64 6f 77 73 20 64 72 69 76 65  c:.Windows drive
03a0: 72 73 20 65 78 74 65 6e 64 65 64 20 74 6f 20 0a  rs extended to .
03b0: 2b 09 2a 20 77 69 6e 2f 74 63 6c 57 69 6e 43 68  +.* win/tclWinCh
03c0: 61 6e 2e 63 3a 09 6d 61 6e 61 67 65 20 74 68 72  an.c:.manage thr
03d0: 65 61 64 20 73 74 61 74 65 20 69 6e 20 61 20 74  ead state in a t
03e0: 68 72 65 61 64 0a 2b 09 2a 20 77 69 6e 2f 74 63  hread.+.* win/tc
03f0: 6c 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 3a 09 61  lWinConsole.c:.a
0400: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 72 2e 0a 2b  ction handler..+
0410: 09 2a 20 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70  .* win/tclWinPip
0420: 65 2e 63 3a 09 0a 2b 09 2a 20 77 69 6e 2f 74 63  e.c:..+.* win/tc
0430: 6c 57 69 6e 53 65 72 69 61 6c 2e 63 3a 09 0a 2b  lWinSerial.c:..+
0440: 09 2a 20 77 69 6e 2f 74 63 6c 57 69 6e 53 6f 63  .* win/tclWinSoc
0450: 6b 2e 63 3a 09 0a 2b 09 2a 20 6d 61 63 2f 74 63  k.c:..+.* mac/tc
0460: 6c 4d 61 63 43 68 61 6e 2e 63 3a 0a 2b 0a 20 32  lMacChan.c:.+. 2
0470: 30 30 35 2d 30 31 2d 32 35 20 20 44 6f 6e 20 50  005-01-25  Don P
0480: 6f 72 74 65 72 20 20 3c 64 67 70 40 75 73 65 72  orter  <dgp@user
0490: 73 2e 73 6f 75 72 63 65 66 6f 72 67 65 2e 6e 65  s.sourceforge.ne
04a0: 74 3e 0a 20 0a 20 20 20 20 20 20 20 20 20 2a 20  t>. .         * 
04b0: 6c 69 62 72 61 72 79 2f 61 75 74 6f 2e 74 63 6c  library/auto.tcl
04c0: 3a 20 20 20 20 20 55 70 64 61 74 65 64 20 5b 61  :     Updated [a
04d0: 75 74 6f 5f 72 65 73 65 74 5d 20 74 6f 20 63 6c  uto_reset] to cl
04e0: 65 61 72 20 61 75 74 6f 2d 6c 6f 61 64 65 64 0a  ear auto-loaded.
04f0: 49 6e 64 65 78 3a 20 64 6f 63 2f 43 72 74 43 68  Index: doc/CrtCh
0500: 61 6e 6e 65 6c 2e 33 0a 3d 3d 3d 3d 3d 3d 3d 3d  annel.3.========
0510: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0540: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20  ===========.RCS 
0550: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74  file: /cvsroot/t
0560: 63 6c 2f 74 63 6c 2f 64 6f 63 2f 43 72 74 43 68  cl/tcl/doc/CrtCh
0570: 61 6e 6e 65 6c 2e 33 2c 76 0a 72 65 74 72 69 65  annel.3,v.retrie
0580: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e  ving revision 1.
0590: 31 36 2e 32 2e 32 0a 64 69 66 66 20 2d 77 20 2d  16.2.2.diff -w -
05a0: 75 20 2d 72 31 2e 31 36 2e 32 2e 32 20 43 72 74  u -r1.16.2.2 Crt
05b0: 43 68 61 6e 6e 65 6c 2e 33 0a 2d 2d 2d 20 64 6f  Channel.3.--- do
05c0: 63 2f 43 72 74 43 68 61 6e 6e 65 6c 2e 33 09 32  c/CrtChannel.3.2
05d0: 20 4e 6f 76 20 32 30 30 34 20 30 39 3a 32 31 3a   Nov 2004 09:21:
05e0: 32 35 20 2d 30 30 30 30 09 31 2e 31 36 2e 32 2e  25 -0000.1.16.2.
05f0: 32 0a 2b 2b 2b 20 64 6f 63 2f 43 72 74 43 68 61  2.+++ doc/CrtCha
0600: 6e 6e 65 6c 2e 33 09 32 37 20 4a 61 6e 20 32 30  nnel.3.27 Jan 20
0610: 30 35 20 32 32 3a 34 39 3a 31 38 20 2d 30 30 30  05 22:49:18 -000
0620: 30 0a 40 40 20 2d 37 2c 31 31 20 2b 37 2c 31 31  0.@@ -7,11 +7,11
0630: 20 40 40 0a 20 27 5c 22 0a 20 27 5c 22 20 52 43   @@. '\". '\" RC
0640: 53 3a 20 40 28 23 29 20 24 49 64 3a 20 43 72 74  S: @(#) $Id: Crt
0650: 43 68 61 6e 6e 65 6c 2e 33 2c 76 20 31 2e 31 36  Channel.3,v 1.16
0660: 2e 32 2e 32 20 32 30 30 34 2f 31 31 2f 30 32 20  .2.2 2004/11/02 
0670: 30 39 3a 32 31 3a 32 35 20 64 6b 66 20 45 78 70  09:21:25 dkf Exp
0680: 20 24 0a 20 2e 73 6f 20 6d 61 6e 2e 6d 61 63 72   $. .so man.macr
0690: 6f 73 0a 2d 2e 54 48 20 54 63 6c 5f 43 72 65 61  os.-.TH Tcl_Crea
06a0: 74 65 43 68 61 6e 6e 65 6c 20 33 20 38 2e 33 20  teChannel 3 8.3 
06b0: 54 63 6c 20 22 54 63 6c 20 4c 69 62 72 61 72 79  Tcl "Tcl Library
06c0: 20 50 72 6f 63 65 64 75 72 65 73 22 0a 2b 2e 54   Procedures".+.T
06d0: 48 20 54 63 6c 5f 43 72 65 61 74 65 43 68 61 6e  H Tcl_CreateChan
06e0: 6e 65 6c 20 33 20 38 2e 34 20 54 63 6c 20 22 54  nel 3 8.4 Tcl "T
06f0: 63 6c 20 4c 69 62 72 61 72 79 20 50 72 6f 63 65  cl Library Proce
0700: 64 75 72 65 73 22 0a 20 2e 42 53 0a 20 27 5c 22  dures". .BS. '\"
0710: 20 4e 6f 74 65 3a 20 20 64 6f 20 6e 6f 74 20 6d   Note:  do not m
0720: 6f 64 69 66 79 20 74 68 65 20 2e 53 48 20 4e 41  odify the .SH NA
0730: 4d 45 20 6c 69 6e 65 20 69 6d 6d 65 64 69 61 74  ME line immediat
0740: 65 6c 79 20 62 65 6c 6f 77 21 0a 20 2e 53 48 20  ely below!. .SH 
0750: 4e 41 4d 45 0a 2d 54 63 6c 5f 43 72 65 61 74 65  NAME.-Tcl_Create
0760: 43 68 61 6e 6e 65 6c 2c 20 54 63 6c 5f 47 65 74  Channel, Tcl_Get
0770: 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e 63 65 44  ChannelInstanceD
0780: 61 74 61 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e  ata, Tcl_GetChan
0790: 6e 65 6c 54 79 70 65 2c 20 54 63 6c 5f 47 65 74  nelType, Tcl_Get
07a0: 43 68 61 6e 6e 65 6c 4e 61 6d 65 2c 20 54 63 6c  ChannelName, Tcl
07b0: 5f 47 65 74 43 68 61 6e 6e 65 6c 48 61 6e 64 6c  _GetChannelHandl
07c0: 65 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65  e, Tcl_GetChanne
07d0: 6c 4d 6f 64 65 2c 20 54 63 6c 5f 47 65 74 43 68  lMode, Tcl_GetCh
07e0: 61 6e 6e 65 6c 42 75 66 66 65 72 53 69 7a 65 2c  annelBufferSize,
07f0: 20 54 63 6c 5f 53 65 74 43 68 61 6e 6e 65 6c 42   Tcl_SetChannelB
0800: 75 66 66 65 72 53 69 7a 65 2c 20 54 63 6c 5f 4e  ufferSize, Tcl_N
0810: 6f 74 69 66 79 43 68 61 6e 6e 65 6c 2c 20 54 63  otifyChannel, Tc
0820: 6c 5f 42 61 64 43 68 61 6e 6e 65 6c 4f 70 74 69  l_BadChannelOpti
0830: 6f 6e 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 4e  on, Tcl_ChannelN
0840: 61 6d 65 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c  ame, Tcl_Channel
0850: 56 65 72 73 69 6f 6e 2c 20 54 63 6c 5f 43 68 61  Version, Tcl_Cha
0860: 6e 6e 65 6c 42 6c 6f 63 6b 4d 6f 64 65 50 72 6f  nnelBlockModePro
0870: 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 43 6c  c, Tcl_ChannelCl
0880: 6f 73 65 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61  oseProc, Tcl_Cha
0890: 6e 6e 65 6c 43 6c 6f 73 65 32 50 72 6f 63 2c 20  nnelClose2Proc, 
08a0: 54 63 6c 5f 43 68 61 6e 6e 65 6c 49 6e 70 75 74  Tcl_ChannelInput
08b0: 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65  Proc, Tcl_Channe
08c0: 6c 4f 75 74 70 75 74 50 72 6f 63 2c 20 54 63 6c  lOutputProc, Tcl
08d0: 5f 43 68 61 6e 6e 65 6c 53 65 65 6b 50 72 6f 63  _ChannelSeekProc
08e0: 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 57 69 64  , Tcl_ChannelWid
08f0: 65 53 65 65 6b 50 72 6f 63 2c 20 54 63 6c 5f 43  eSeekProc, Tcl_C
0900: 68 61 6e 6e 65 6c 53 65 74 4f 70 74 69 6f 6e 50  hannelSetOptionP
0910: 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c  roc, Tcl_Channel
0920: 47 65 74 4f 70 74 69 6f 6e 50 72 6f 63 2c 20 54  GetOptionProc, T
0930: 63 6c 5f 43 68 61 6e 6e 65 6c 57 61 74 63 68 50  cl_ChannelWatchP
0940: 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c  roc, Tcl_Channel
0950: 47 65 74 48 61 6e 64 6c 65 50 72 6f 63 2c 20 54  GetHandleProc, T
0960: 63 6c 5f 43 68 61 6e 6e 65 6c 46 6c 75 73 68 50  cl_ChannelFlushP
0970: 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c  roc, Tcl_Channel
0980: 48 61 6e 64 6c 65 72 50 72 6f 63 2c 20 54 63 6c  HandlerProc, Tcl
0990: 5f 49 73 43 68 61 6e 6e 65 6c 53 68 61 72 65 64  _IsChannelShared
09a0: 2c 20 54 63 6c 5f 49 73 43 68 61 6e 6e 65 6c 52  , Tcl_IsChannelR
09b0: 65 67 69 73 74 65 72 65 64 2c 20 54 63 6c 5f 43  egistered, Tcl_C
09c0: 75 74 43 68 61 6e 6e 65 6c 2c 20 54 63 6c 5f 53  utChannel, Tcl_S
09d0: 70 6c 69 63 65 43 68 61 6e 6e 65 6c 2c 20 54 63  pliceChannel, Tc
09e0: 6c 5f 49 73 43 68 61 6e 6e 65 6c 45 78 69 73 74  l_IsChannelExist
09f0: 69 6e 67 2c 20 54 63 6c 5f 43 6c 65 61 72 43 68  ing, Tcl_ClearCh
0a00: 61 6e 6e 65 6c 48 61 6e 64 6c 65 72 73 2c 20 54  annelHandlers, T
0a10: 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 68 72  cl_GetChannelThr
0a20: 65 61 64 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c  ead, Tcl_Channel
0a30: 42 75 66 66 65 72 65 64 20 5c 2d 20 70 72 6f 63  Buffered \- proc
0a40: 65 64 75 72 65 73 20 66 6f 72 20 63 72 65 61 74  edures for creat
0a50: 69 6e 67 20 61 6e 64 20 6d 61 6e 69 70 75 6c 61  ing and manipula
0a60: 74 69 6e 67 20 63 68 61 6e 6e 65 6c 73 0a 2b 54  ting channels.+T
0a70: 63 6c 5f 43 72 65 61 74 65 43 68 61 6e 6e 65 6c  cl_CreateChannel
0a80: 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c  , Tcl_GetChannel
0a90: 49 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 54 63  InstanceData, Tc
0aa0: 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 79 70 65  l_GetChannelType
0ab0: 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c  , Tcl_GetChannel
0ac0: 4e 61 6d 65 2c 20 54 63 6c 5f 47 65 74 43 68 61  Name, Tcl_GetCha
0ad0: 6e 6e 65 6c 48 61 6e 64 6c 65 2c 20 54 63 6c 5f  nnelHandle, Tcl_
0ae0: 47 65 74 43 68 61 6e 6e 65 6c 4d 6f 64 65 2c 20  GetChannelMode, 
0af0: 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 42 75  Tcl_GetChannelBu
0b00: 66 66 65 72 53 69 7a 65 2c 20 54 63 6c 5f 53 65  fferSize, Tcl_Se
0b10: 74 43 68 61 6e 6e 65 6c 42 75 66 66 65 72 53 69  tChannelBufferSi
0b20: 7a 65 2c 20 54 63 6c 5f 4e 6f 74 69 66 79 43 68  ze, Tcl_NotifyCh
0b30: 61 6e 6e 65 6c 2c 20 54 63 6c 5f 42 61 64 43 68  annel, Tcl_BadCh
0b40: 61 6e 6e 65 6c 4f 70 74 69 6f 6e 2c 20 54 63 6c  annelOption, Tcl
0b50: 5f 43 68 61 6e 6e 65 6c 4e 61 6d 65 2c 20 54 63  _ChannelName, Tc
0b60: 6c 5f 43 68 61 6e 6e 65 6c 56 65 72 73 69 6f 6e  l_ChannelVersion
0b70: 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 42 6c 6f  , Tcl_ChannelBlo
0b80: 63 6b 4d 6f 64 65 50 72 6f 63 2c 20 54 63 6c 5f  ckModeProc, Tcl_
0b90: 43 68 61 6e 6e 65 6c 43 6c 6f 73 65 50 72 6f 63  ChannelCloseProc
0ba0: 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 43 6c 6f  , Tcl_ChannelClo
0bb0: 73 65 32 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61  se2Proc, Tcl_Cha
0bc0: 6e 6e 65 6c 49 6e 70 75 74 50 72 6f 63 2c 20 54  nnelInputProc, T
0bd0: 63 6c 5f 43 68 61 6e 6e 65 6c 4f 75 74 70 75 74  cl_ChannelOutput
0be0: 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65  Proc, Tcl_Channe
0bf0: 6c 53 65 65 6b 50 72 6f 63 2c 20 54 63 6c 5f 43  lSeekProc, Tcl_C
0c00: 68 61 6e 6e 65 6c 57 69 64 65 53 65 65 6b 50 72  hannelWideSeekPr
0c10: 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 53  oc, Tcl_ChannelS
0c20: 65 74 4f 70 74 69 6f 6e 50 72 6f 63 2c 20 54 63  etOptionProc, Tc
0c30: 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 4f 70 74 69  l_ChannelGetOpti
0c40: 6f 6e 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e  onProc, Tcl_Chan
0c50: 6e 65 6c 57 61 74 63 68 50 72 6f 63 2c 20 54 63  nelWatchProc, Tc
0c60: 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 48 61 6e 64  l_ChannelGetHand
0c70: 6c 65 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e  leProc, Tcl_Chan
0c80: 6e 65 6c 46 6c 75 73 68 50 72 6f 63 2c 20 54 63  nelFlushProc, Tc
0c90: 6c 5f 43 68 61 6e 6e 65 6c 48 61 6e 64 6c 65 72  l_ChannelHandler
0ca0: 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65  Proc, Tcl_Channe
0cb0: 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f  lThreadActionPro
0cc0: 63 2c 20 54 63 6c 5f 49 73 43 68 61 6e 6e 65 6c  c, Tcl_IsChannel
0cd0: 53 68 61 72 65 64 2c 20 54 63 6c 5f 49 73 43 68  Shared, Tcl_IsCh
0ce0: 61 6e 6e 65 6c 52 65 67 69 73 74 65 72 65 64 2c  annelRegistered,
0cf0: 20 54 63 6c 5f 43 75 74 43 68 61 6e 6e 65 6c 2c   Tcl_CutChannel,
0d00: 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 6e 6e   Tcl_SpliceChann
0d10: 65 6c 2c 20 54 63 6c 5f 49 73 43 68 61 6e 6e 65  el, Tcl_IsChanne
0d20: 6c 45 78 69 73 74 69 6e 67 2c 20 54 63 6c 5f 43  lExisting, Tcl_C
0d30: 6c 65 61 72 43 68 61 6e 6e 65 6c 48 61 6e 64 6c  learChannelHandl
0d40: 65 72 73 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e  ers, Tcl_GetChan
0d50: 6e 65 6c 54 68 72 65 61 64 2c 20 54 63 6c 5f 43  nelThread, Tcl_C
0d60: 68 61 6e 6e 65 6c 42 75 66 66 65 72 65 64 20 5c  hannelBuffered \
0d70: 2d 20 70 72 6f 63 65 64 75 72 65 73 20 66 6f 72  - procedures for
0d80: 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20 6d 61   creating and ma
0d90: 6e 69 70 75 6c 61 74 69 6e 67 20 63 68 61 6e 6e  nipulating chann
0da0: 65 6c 73 0a 20 2e 53 48 20 53 59 4e 4f 50 53 49  els. .SH SYNOPSI
0db0: 53 0a 20 2e 6e 66 0a 20 5c 66 42 23 69 6e 63 6c  S. .nf. \fB#incl
0dc0: 75 64 65 20 3c 74 63 6c 2e 68 3e 5c 66 52 0a 40  ude <tcl.h>\fR.@
0dd0: 40 20 2d 39 39 2c 36 20 2b 39 39 2c 39 20 40 40  @ -99,6 +99,9 @@
0de0: 0a 20 2e 56 53 20 38 2e 34 0a 20 54 63 6c 5f 44  . .VS 8.4. Tcl_D
0df0: 72 69 76 65 72 57 69 64 65 53 65 65 6b 50 72 6f  riverWideSeekPro
0e00: 63 20 2a 0a 20 5c 66 42 54 63 6c 5f 43 68 61 6e  c *. \fBTcl_Chan
0e10: 6e 65 6c 57 69 64 65 53 65 65 6b 50 72 6f 63 5c  nelWideSeekProc\
0e20: 66 52 28 5c 66 49 74 79 70 65 50 74 72 5c 66 52  fR(\fItypePtr\fR
0e30: 29 0a 2b 2e 73 70 0a 2b 54 63 6c 5f 44 72 69 76  ).+.sp.+Tcl_Driv
0e40: 65 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72  erThreadActionPr
0e50: 6f 63 20 2a 0a 2b 5c 66 42 54 63 6c 5f 43 68 61  oc *.+\fBTcl_Cha
0e60: 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e  nnelThreadAction
0e70: 50 72 6f 63 5c 66 52 28 5c 66 49 74 79 70 65 50  Proc\fR(\fItypeP
0e80: 74 72 5c 66 52 29 0a 20 2e 56 45 20 38 2e 34 0a  tr\fR). .VE 8.4.
0e90: 20 2e 73 70 0a 20 54 63 6c 5f 44 72 69 76 65 72   .sp. Tcl_Driver
0ea0: 53 65 74 4f 70 74 69 6f 6e 50 72 6f 63 20 2a 0a  SetOptionProc *.
0eb0: 40 40 20 2d 32 38 39 2c 31 30 20 2b 32 39 32 2c  @@ -289,10 +292,
0ec0: 32 30 20 40 40 0a 20 28 74 68 72 65 61 64 29 67  20 @@. (thread)g
0ed0: 6c 6f 62 61 6c 20 6c 69 73 74 20 6f 66 20 61 6c  lobal list of al
0ee0: 6c 20 63 68 61 6e 6e 65 6c 73 20 28 6f 66 20 74  l channels (of t
0ef0: 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61  he current threa
0f00: 64 29 2e 0a 20 41 70 70 6c 69 63 61 74 69 6f 6e  d).. Application
0f10: 20 74 6f 20 61 20 63 68 61 6e 6e 65 6c 20 73 74   to a channel st
0f20: 69 6c 6c 20 72 65 67 69 73 74 65 72 65 64 20 69  ill registered i
0f30: 6e 20 73 6f 6d 65 20 69 6e 74 65 72 70 72 65 74  n some interpret
0f40: 65 72 0a 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  er. is not allow
0f50: 65 64 2e 0a 2b 2e 56 53 20 38 2e 34 0a 2b 41 6c  ed..+.VS 8.4.+Al
0f60: 73 6f 20 6e 6f 74 69 66 69 65 73 20 74 68 65 20  so notifies the 
0f70: 64 72 69 76 65 72 20 69 66 20 74 68 65 20 5c 66  driver if the \f
0f80: 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65  BTcl_ChannelType
0f90: 5c 66 52 20 76 65 72 73 69 6f 6e 20 69 73 0a 2b  \fR version is.+
0fa0: 5c 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56  \fBTCL_CHANNEL_V
0fb0: 45 52 53 49 4f 4e 5f 34 5c 66 52 20 28 6f 72 20  ERSION_4\fR (or 
0fc0: 68 69 67 68 65 72 29 2c 20 61 6e 64 0a 2b 5c 66  higher), and.+\f
0fd0: 42 54 63 6c 5f 44 72 69 76 65 72 54 68 72 65 61  BTcl_DriverThrea
0fe0: 64 41 63 74 69 6f 6e 50 72 6f 63 5c 66 52 20 69  dActionProc\fR i
0ff0: 73 20 64 65 66 69 6e 65 64 20 66 6f 72 20 69 74  s defined for it
1000: 2e 0a 2b 2e 56 45 20 38 2e 34 0a 20 2e 50 50 0a  ..+.VE 8.4. .PP.
1010: 20 5c 66 42 54 63 6c 5f 53 70 6c 69 63 65 43 68   \fBTcl_SpliceCh
1020: 61 6e 6e 65 6c 5c 66 52 20 61 64 64 73 20 74 68  annel\fR adds th
1030: 65 20 73 70 65 63 69 66 69 65 64 20 5c 66 49 63  e specified \fIc
1040: 68 61 6e 6e 65 6c 5c 66 52 20 74 6f 20 74 68 65  hannel\fR to the
1050: 0a 20 28 74 68 72 65 61 64 29 67 6c 6f 62 61 6c  . (thread)global
1060: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 61   list of all cha
1070: 6e 6e 65 6c 73 20 28 6f 66 20 74 68 65 20 63 75  nnels (of the cu
1080: 72 72 65 6e 74 20 74 68 72 65 61 64 29 2e 0a 20  rrent thread).. 
1090: 41 70 70 6c 69 63 61 74 69 6f 6e 20 74 6f 20 61  Application to a
10a0: 20 63 68 61 6e 6e 65 6c 20 72 65 67 69 73 74 65   channel registe
10b0: 72 65 64 20 69 6e 20 73 6f 6d 65 20 69 6e 74 65  red in some inte
10c0: 72 70 72 65 74 65 72 20 69 73 20 6e 6f 74 20 61  rpreter is not a
10d0: 6c 6c 6f 77 65 64 2e 0a 2b 2e 56 53 20 38 2e 34  llowed..+.VS 8.4
10e0: 0a 2b 41 6c 73 6f 20 6e 6f 74 69 66 69 65 73 20  .+Also notifies 
10f0: 74 68 65 20 64 72 69 76 65 72 20 69 66 20 74 68  the driver if th
1100: 65 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c  e \fBTcl_Channel
1110: 54 79 70 65 5c 66 52 20 76 65 72 73 69 6f 6e 20  Type\fR version 
1120: 69 73 0a 2b 5c 66 42 54 43 4c 5f 43 48 41 4e 4e  is.+\fBTCL_CHANN
1130: 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 5c 66 52 20  EL_VERSION_4\fR 
1140: 28 6f 72 20 68 69 67 68 65 72 29 2c 20 61 6e 64  (or higher), and
1150: 0a 2b 5c 66 42 54 63 6c 5f 44 72 69 76 65 72 54  .+\fBTcl_DriverT
1160: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 5c  hreadActionProc\
1170: 66 52 20 69 73 20 64 65 66 69 6e 65 64 20 66 6f  fR is defined fo
1180: 72 20 69 74 2e 0a 2b 2e 56 45 20 38 2e 34 0a 20  r it..+.VE 8.4. 
1190: 2e 50 50 0a 20 5c 66 42 54 63 6c 5f 43 6c 65 61  .PP. \fBTcl_Clea
11a0: 72 43 68 61 6e 6e 65 6c 48 61 6e 64 6c 65 72 73  rChannelHandlers
11b0: 5c 66 52 20 72 65 6d 6f 76 65 73 20 61 6c 6c 20  \fR removes all 
11c0: 63 68 61 6e 6e 65 6c 68 61 6e 64 6c 65 72 73 20  channelhandlers 
11d0: 61 6e 64 20 65 76 65 6e 74 0a 20 73 63 72 69 70  and event. scrip
11e0: 74 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ts associated wi
11f0: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
1200: 20 5c 66 49 63 68 61 6e 6e 65 6c 5c 66 52 2c 20   \fIchannel\fR, 
1210: 74 68 75 73 20 73 68 75 74 74 69 6e 67 0a 40 40  thus shutting.@@
1220: 20 2d 33 32 36 2c 36 20 2b 33 33 39 2c 37 20 40   -326,6 +339,7 @
1230: 40 0a 20 09 54 63 6c 5f 44 72 69 76 65 72 46 6c  @. .Tcl_DriverFl
1240: 75 73 68 50 72 6f 63 20 2a 5c 66 49 66 6c 75 73  ushProc *\fIflus
1250: 68 50 72 6f 63 5c 66 52 3b 09 0a 20 09 54 63 6c  hProc\fR;.. .Tcl
1260: 5f 44 72 69 76 65 72 48 61 6e 64 6c 65 72 50 72  _DriverHandlerPr
1270: 6f 63 20 2a 5c 66 49 68 61 6e 64 6c 65 72 50 72  oc *\fIhandlerPr
1280: 6f 63 5c 66 52 3b 09 0a 20 09 54 63 6c 5f 44 72  oc\fR;.. .Tcl_Dr
1290: 69 76 65 72 57 69 64 65 53 65 65 6b 50 72 6f 63  iverWideSeekProc
12a0: 20 2a 5c 66 49 77 69 64 65 53 65 65 6b 50 72 6f   *\fIwideSeekPro
12b0: 63 5c 66 52 3b 0a 2b 09 54 63 6c 5f 44 72 69 76  c\fR;.+.Tcl_Driv
12c0: 65 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72  erThreadActionPr
12d0: 6f 63 20 2a 5c 66 49 74 68 72 65 61 64 41 63 74  oc *\fIthreadAct
12e0: 69 6f 6e 50 72 6f 63 5c 66 52 3b 0a 20 7d 20 54  ionProc\fR;. } T
12f0: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 3b 0a  cl_ChannelType;.
1300: 20 2e 43 45 0a 20 2e 50 50 0a 40 40 20 2d 33 34   .CE. .PP.@@ -34
1310: 36 2c 36 20 2b 33 36 30 2c 37 20 40 40 0a 20 5c  6,6 +360,7 @@. \
1320: 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 4f 75 74  fBTcl_ChannelOut
1330: 70 75 74 50 72 6f 63 5c 66 52 2c 20 5c 66 42 54  putProc\fR, \fBT
1340: 63 6c 5f 43 68 61 6e 6e 65 6c 53 65 65 6b 50 72  cl_ChannelSeekPr
1350: 6f 63 5c 66 52 2c 0a 20 2e 56 53 20 38 2e 34 0a  oc\fR,. .VS 8.4.
1360: 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 57   \fBTcl_ChannelW
1370: 69 64 65 53 65 65 6b 50 72 6f 63 5c 66 52 2c 0a  ideSeekProc\fR,.
1380: 2b 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 54  +\fBTcl_ChannelT
1390: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 5c  hreadActionProc\
13a0: 66 52 2c 0a 20 2e 56 45 20 38 2e 34 0a 20 5c 66  fR,. .VE 8.4. \f
13b0: 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 53 65 74 4f  BTcl_ChannelSetO
13c0: 70 74 69 6f 6e 50 72 6f 63 5c 66 52 2c 20 5c 66  ptionProc\fR, \f
13d0: 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 4f  BTcl_ChannelGetO
13e0: 70 74 69 6f 6e 50 72 6f 63 5c 66 52 2c 0a 20 5c  ptionProc\fR,. \
13f0: 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 57 61 74  fBTcl_ChannelWat
1400: 63 68 50 72 6f 63 5c 66 52 2c 20 5c 66 42 54 63  chProc\fR, \fBTc
1410: 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 48 61 6e 64  l_ChannelGetHand
1420: 6c 65 50 72 6f 63 5c 66 52 2c 0a 40 40 20 2d 33  leProc\fR,.@@ -3
1430: 36 37 2c 31 38 20 2b 33 38 32 2c 32 37 20 40 40  67,18 +382,27 @@
1440: 0a 20 0a 20 2e 53 48 20 56 45 52 53 49 4f 4e 0a  . . .SH VERSION.
1450: 20 2e 50 50 0a 2d 54 68 65 20 5c 66 49 76 65 72   .PP.-The \fIver
1460: 73 69 6f 6e 5c 66 52 20 66 69 65 6c 64 20 73 68  sion\fR field sh
1470: 6f 75 6c 64 20 62 65 20 73 65 74 20 74 6f 20 5c  ould be set to \
1480: 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45  fBTCL_CHANNEL_VE
1490: 52 53 49 4f 4e 5f 32 5c 66 52 2e 0a 2d 49 66 20  RSION_2\fR..-If 
14a0: 69 74 20 69 73 20 6e 6f 74 20 73 65 74 20 74 6f  it is not set to
14b0: 20 74 68 69 73 20 76 61 6c 75 65 20 5c 66 42 54   this value \fBT
14c0: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49  CL_CHANNEL_VERSI
14d0: 4f 4e 5f 33 5c 66 52 2c 20 74 68 65 6e 20 74 68  ON_3\fR, then th
14e0: 69 73 0a 2d 5c 66 42 54 63 6c 5f 43 68 61 6e 6e  is.-\fBTcl_Chann
14f0: 65 6c 54 79 70 65 5c 66 52 20 69 73 20 61 73 73  elType\fR is ass
1500: 75 6d 65 64 20 74 6f 20 68 61 76 65 20 74 68 65  umed to have the
1510: 20 6f 6c 64 65 72 20 73 74 72 75 63 74 75 72 65   older structure
1520: 2e 20 20 53 65 65 0a 2b 0a 2b 54 68 65 20 5c 66  .  See.+.+The \f
1530: 49 76 65 72 73 69 6f 6e 5c 66 52 20 66 69 65 6c  Iversion\fR fiel
1540: 64 20 73 68 6f 75 6c 64 20 62 65 20 73 65 74 20  d should be set 
1550: 74 6f 20 74 68 65 20 76 65 72 73 69 6f 6e 20 6f  to the version o
1560: 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
1570: 2b 74 68 61 74 20 79 6f 75 20 72 65 71 75 69 72  +that you requir
1580: 65 2e 20 5c 66 42 54 43 4c 5f 43 48 41 4e 4e 45  e. \fBTCL_CHANNE
1590: 4c 5f 56 45 52 53 49 4f 4e 5f 32 5c 66 52 20 69  L_VERSION_2\fR i
15a0: 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 72 65  s the minimum re
15b0: 63 6f 6d 6d 65 6e 64 65 64 2e 0a 2b 2e 56 53 20  commended..+.VS 
15c0: 38 2e 34 0a 2b 5c 66 42 54 43 4c 5f 43 48 41 4e  8.4.+\fBTCL_CHAN
15d0: 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 5c 66 52  NEL_VERSION_3\fR
15e0: 20 6d 75 73 74 20 62 65 20 73 65 74 20 74 6f 20   must be set to 
15f0: 73 70 65 63 69 66 69 79 20 74 68 65 20 5c 66 49  specifiy the \fI
1600: 77 69 64 65 53 65 65 6b 50 72 6f 63 5c 66 52 20  wideSeekProc\fR 
1610: 6d 65 6d 62 65 72 2e 0a 2b 2e 56 45 20 38 2e 34  member..+.VE 8.4
1620: 0a 2b 2e 56 53 20 38 2e 34 0a 2b 5c 66 42 54 43  .+.VS 8.4.+\fBTC
1630: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f  L_CHANNEL_VERSIO
1640: 4e 5f 34 5c 66 52 20 6d 75 73 74 20 62 65 20 73  N_4\fR must be s
1650: 65 74 20 74 6f 20 73 70 65 63 69 66 69 79 20 74  et to specifiy t
1660: 68 65 0a 2b 5c 66 49 74 68 72 65 61 64 41 63 74  he.+\fIthreadAct
1670: 69 6f 6e 50 72 6f 63 5c 66 52 20 6d 65 6d 62 65  ionProc\fR membe
1680: 72 20 28 69 6e 63 6c 75 64 65 73 20 5c 66 49 77  r (includes \fIw
1690: 69 64 65 53 65 65 6b 50 72 6f 63 5c 66 52 29 2e  ideSeekProc\fR).
16a0: 0a 2b 2e 56 45 20 38 2e 34 0a 2b 49 66 20 69 74  .+.VE 8.4.+If it
16b0: 20 69 73 20 6e 6f 74 20 73 65 74 20 74 6f 20 61   is not set to a
16c0: 6e 79 20 6f 66 20 74 68 65 73 65 2c 20 74 68 65  ny of these, the
16d0: 6e 20 74 68 69 73 0a 2b 5c 66 42 54 63 6c 5f 43  n this.+\fBTcl_C
16e0: 68 61 6e 6e 65 6c 54 79 70 65 5c 66 52 20 69 73  hannelType\fR is
16f0: 20 61 73 73 75 6d 65 64 20 74 6f 20 68 61 76 65   assumed to have
1700: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 74   the original st
1710: 72 75 63 74 75 72 65 2e 20 20 53 65 65 0a 20 5c  ructure.  See. \
1720: 66 42 4f 4c 44 20 43 48 41 4e 4e 45 4c 20 54 59  fBOLD CHANNEL TY
1730: 50 45 53 5c 66 52 20 66 6f 72 20 6d 6f 72 65 20  PES\fR for more 
1740: 64 65 74 61 69 6c 73 2e 20 20 57 68 69 6c 65 20  details.  While 
1750: 54 63 6c 20 77 69 6c 6c 20 72 65 63 6f 67 6e 69  Tcl will recogni
1760: 7a 65 0a 2d 61 6e 64 20 66 75 6e 63 74 69 6f 6e  ze.-and function
1770: 20 77 69 74 68 20 65 69 74 68 65 72 20 73 74 72   with either str
1780: 75 63 74 75 72 65 2c 20 73 74 61 63 6b 65 64 20  ucture, stacked 
1790: 63 68 61 6e 6e 65 6c 73 20 6d 75 73 74 20 62 65  channels must be
17a0: 20 6f 66 20 61 74 0a 2b 61 6e 64 20 66 75 6e 63   of at.+and func
17b0: 74 69 6f 6e 20 77 69 74 68 20 65 69 74 68 65 72  tion with either
17c0: 20 73 74 72 75 63 74 75 72 65 73 2c 20 73 74 61   structures, sta
17d0: 63 6b 65 64 20 63 68 61 6e 6e 65 6c 73 20 6d 75  cked channels mu
17e0: 73 74 20 62 65 20 6f 66 20 61 74 0a 20 6c 65 61  st be of at. lea
17f0: 73 74 20 5c 66 42 54 43 4c 5f 43 48 41 4e 4e 45  st \fBTCL_CHANNE
1800: 4c 5f 56 45 52 53 49 4f 4e 5f 32 5c 66 52 20 74  L_VERSION_2\fR t
1810: 6f 20 66 75 6e 63 74 69 6f 6e 20 63 6f 72 72 65  o function corre
1820: 63 74 6c 79 2e 0a 20 2e 50 50 0a 20 54 68 69 73  ctly.. .PP. This
1830: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 72 65   value can be re
1840: 74 72 69 65 76 65 64 20 77 69 74 68 20 5c 66 42  trieved with \fB
1850: 54 63 6c 5f 43 68 61 6e 6e 65 6c 56 65 72 73 69  Tcl_ChannelVersi
1860: 6f 6e 5c 66 52 2c 20 77 68 69 63 68 20 72 65 74  on\fR, which ret
1870: 75 72 6e 73 0a 20 2e 56 53 20 38 2e 34 0a 2d 6f  urns. .VS 8.4.-o
1880: 6e 65 20 6f 66 20 5c 66 42 54 43 4c 5f 43 48 41  ne of \fBTCL_CHA
1890: 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 5c 66  NNEL_VERSION_3\f
18a0: 52 2c 0a 2b 6f 6e 65 20 6f 66 20 5c 66 42 54 43  R,.+one of \fBTC
18b0: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f  L_CHANNEL_VERSIO
18c0: 4e 5f 34 5c 66 52 2c 20 5c 66 42 54 43 4c 5f 43  N_4\fR, \fBTCL_C
18d0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33  HANNEL_VERSION_3
18e0: 5c 66 52 2c 0a 20 2e 56 45 20 38 2e 34 0a 2d 5c  \fR,. .VE 8.4.-\
18f0: 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45  fBTCL_CHANNEL_VE
1900: 52 53 49 4f 4e 5f 32 5c 66 52 20 6f 72 20 5c 66  RSION_2\fR or \f
1910: 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52  BTCL_CHANNEL_VER
1920: 53 49 4f 4e 5f 31 5c 66 52 2e 0a 2b 5c 66 42 54  SION_1\fR..+\fBT
1930: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49  CL_CHANNEL_VERSI
1940: 4f 4e 5f 32 5c 66 52 2c 20 6f 72 20 5c 66 42 54  ON_2\fR, or \fBT
1950: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49  CL_CHANNEL_VERSI
1960: 4f 4e 5f 31 5c 66 52 2e 0a 20 0a 20 2e 53 48 20  ON_1\fR.. . .SH 
1970: 42 4c 4f 43 4b 4d 4f 44 45 50 52 4f 43 0a 20 2e  BLOCKMODEPROC. .
1980: 50 50 0a 40 40 20 2d 37 39 30 2c 36 20 2b 38 31  PP.@@ -790,6 +81
1990: 34 2c 33 35 20 40 40 0a 20 54 68 69 73 20 76 61  4,35 @@. This va
19a0: 6c 75 65 20 63 61 6e 20 62 65 20 72 65 74 72 69  lue can be retri
19b0: 65 76 65 64 20 77 69 74 68 20 5c 66 42 54 63 6c  eved with \fBTcl
19c0: 5f 43 68 61 6e 6e 65 6c 48 61 6e 64 6c 65 72 50  _ChannelHandlerP
19d0: 72 6f 63 5c 66 52 2c 20 77 68 69 63 68 20 72 65  roc\fR, which re
19e0: 74 75 72 6e 73 0a 20 61 20 70 6f 69 6e 74 65 72  turns. a pointer
19f0: 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   to the function
1a00: 2e 0a 20 0a 2b 2e 56 53 20 38 2e 34 0a 2b 2e 53  .. .+.VS 8.4.+.S
1a10: 48 20 22 54 48 52 45 41 44 41 43 54 49 4f 4e 50  H "THREADACTIONP
1a20: 52 4f 43 22 0a 2b 2e 50 50 0a 2b 54 68 65 20 5c  ROC".+.PP.+The \
1a30: 66 74 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f  fthreadActionPro
1a40: 63 5c 66 52 20 66 69 65 6c 64 20 63 6f 6e 74 61  c\fR field conta
1a50: 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
1a60: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a  of the function.
1a70: 2b 63 61 6c 6c 65 64 20 62 79 20 74 68 65 20 67  +called by the g
1a80: 65 6e 65 72 69 63 20 6c 61 79 65 72 20 77 68 65  eneric layer whe
1a90: 6e 20 61 20 63 68 61 6e 6e 65 6c 20 69 73 20 63  n a channel is c
1aa0: 72 65 61 74 65 64 2c 20 63 6c 6f 73 65 64 2c 20  reated, closed, 
1ab0: 6f 72 0a 2b 67 6f 69 6e 67 20 74 6f 20 6d 6f 76  or.+going to mov
1ac0: 65 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74  e to a different
1ad0: 20 74 68 72 65 61 64 2c 20 69 2e 65 2e 20 77 68   thread, i.e. wh
1ae0: 65 6e 65 76 65 72 20 74 68 72 65 61 64 2d 73 70  enever thread-sp
1af0: 65 63 69 66 69 63 0a 2b 64 72 69 76 65 72 20 73  ecific.+driver s
1b00: 74 61 74 65 20 6d 69 67 68 74 20 68 61 76 65 20  tate might have 
1b10: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6f  to initialized o
1b20: 72 20 75 70 64 61 74 65 64 2e 20 49 74 20 63 61  r updated. It ca
1b30: 6e 20 62 65 20 4e 55 4c 4c 2e 0a 2b 54 68 65 20  n be NULL..+The 
1b40: 61 63 74 69 6f 6e 20 5c 66 49 54 43 4c 5f 43 48  action \fITCL_CH
1b50: 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 52 45 4d  ANNEL_THREAD_REM
1b60: 4f 56 45 5c 66 52 20 69 73 20 75 73 65 64 20 74  OVE\fR is used t
1b70: 6f 20 6e 6f 74 69 66 79 20 74 68 65 0a 2b 64 72  o notify the.+dr
1b80: 69 76 65 72 20 74 68 61 74 20 69 74 20 73 68 6f  iver that it sho
1b90: 75 6c 64 20 75 70 64 61 74 65 20 6f 72 20 72 65  uld update or re
1ba0: 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61 64 2d  move any thread-
1bb0: 73 70 65 63 69 66 69 63 20 64 61 74 61 20 69 74  specific data it
1bc0: 0a 2b 6d 69 67 68 74 20 62 65 20 6d 61 69 6e 74  .+might be maint
1bd0: 61 69 6e 69 6e 67 20 66 6f 72 20 74 68 65 20 63  aining for the c
1be0: 68 61 6e 6e 65 6c 2e 0a 2b 2e 50 50 0a 2b 54 68  hannel..+.PP.+Th
1bf0: 65 20 61 63 74 69 6f 6e 20 5c 66 49 54 43 4c 5f  e action \fITCL_
1c00: 43 48 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49  CHANNEL_THREAD_I
1c10: 4e 53 45 52 54 5c 66 52 20 69 73 20 75 73 65 64  NSERT\fR is used
1c20: 20 74 6f 20 6e 6f 74 69 66 79 20 74 68 65 0a 2b   to notify the.+
1c30: 64 72 69 76 65 72 20 74 68 61 74 20 69 74 20 73  driver that it s
1c40: 68 6f 75 6c 64 20 75 70 64 61 74 65 20 6f 72 20  hould update or 
1c50: 69 6e 69 74 69 61 6c 69 7a 65 20 61 6e 79 20 74  initialize any t
1c60: 68 72 65 61 64 2d 73 70 65 63 69 66 69 63 20 64  hread-specific d
1c70: 61 74 61 20 69 74 0a 2b 6d 69 67 68 74 20 62 65  ata it.+might be
1c80: 20 6d 61 69 6e 74 61 69 6e 69 6e 67 20 75 73 69   maintaining usi
1c90: 6e 67 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 74  ng the calling t
1ca0: 68 72 65 61 64 20 61 73 20 74 68 65 20 61 73 73  hread as the ass
1cb0: 6f 63 69 61 74 65 2e 20 53 65 65 0a 2b 5c 66 42  ociate. See.+\fB
1cc0: 54 63 6c 5f 43 75 74 43 68 61 6e 6e 65 6c 5c 66  Tcl_CutChannel\f
1cd0: 52 20 61 6e 64 20 5c 66 42 54 63 6c 5f 53 70 6c  R and \fBTcl_Spl
1ce0: 69 63 65 43 68 61 6e 6e 65 6c 5c 66 52 20 66 6f  iceChannel\fR fo
1cf0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 2e 0a 2b  r more detail..+
1d00: 2e 50 50 0a 2b 2e 43 53 0a 2b 74 79 70 65 64 65  .PP.+.CS.+typede
1d10: 66 20 76 6f 69 64 20 54 63 6c 5f 44 72 69 76 65  f void Tcl_Drive
1d20: 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f  rThreadActionPro
1d30: 63 28 0a 2b 09 43 6c 69 65 6e 74 44 61 74 61 20  c(.+.ClientData 
1d40: 5c 66 49 69 6e 73 74 61 6e 63 65 44 61 74 61 5c  \fIinstanceData\
1d50: 66 52 2c 0a 2b 20 20 20 20 20 20 69 6e 74 20 20  fR,.+      int  
1d60: 20 20 20 20 20 20 5c 66 49 61 63 74 69 6f 6e 5c        \fIaction\
1d70: 66 52 29 3b 0a 2b 2e 43 45 0a 2b 2e 50 50 0a 2b  fR);.+.CE.+.PP.+
1d80: 5c 66 49 49 6e 73 74 61 6e 63 65 44 61 74 61 5c  \fIInstanceData\
1d90: 66 52 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  fR is the same a
1da0: 73 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  s the value pass
1db0: 65 64 20 74 6f 0a 2b 5c 66 42 54 63 6c 5f 43 72  ed to.+\fBTcl_Cr
1dc0: 65 61 74 65 43 68 61 6e 6e 65 6c 5c 66 52 20 77  eateChannel\fR w
1dd0: 68 65 6e 20 74 68 69 73 20 63 68 61 6e 6e 65 6c  hen this channel
1de0: 20 77 61 73 20 63 72 65 61 74 65 64 2e 0a 2b 2e   was created..+.
1df0: 50 50 0a 2b 54 68 65 73 65 20 76 61 6c 75 65 73  PP.+These values
1e00: 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 76 65   can be retrieve
1e10: 64 20 77 69 74 68 20 5c 66 42 54 63 6c 5f 43 68  d with \fBTcl_Ch
1e20: 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f  annelThreadActio
1e30: 6e 50 72 6f 63 5c 66 52 2c 0a 2b 77 68 69 63 68  nProc\fR,.+which
1e40: 20 72 65 74 75 72 6e 73 20 61 20 70 6f 69 6e 74   returns a point
1e50: 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  er to the functi
1e60: 6f 6e 2e 0a 2b 2e 56 45 20 38 2e 34 0a 2b 0a 20  on..+.VE 8.4.+. 
1e70: 2e 53 48 20 54 43 4c 5f 42 41 44 43 48 41 4e 4e  .SH TCL_BADCHANN
1e80: 45 4c 4f 50 54 49 4f 4e 0a 20 2e 50 50 0a 20 54  ELOPTION. .PP. T
1e90: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 67 65  his procedure ge
1ea0: 6e 65 72 61 74 65 73 20 61 20 22 62 61 64 20 6f  nerates a "bad o
1eb0: 70 74 69 6f 6e 22 20 65 72 72 6f 72 20 6d 65 73  ption" error mes
1ec0: 73 61 67 65 20 69 6e 20 61 6e 0a 49 6e 64 65 78  sage in an.Index
1ed0: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e 64 65  : generic/tcl.de
1ee0: 63 6c 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  cls.============
1ef0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f20: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65  =======.RCS file
1f30: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74  : /cvsroot/tcl/t
1f40: 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 2e 64  cl/generic/tcl.d
1f50: 65 63 6c 73 2c 76 0a 72 65 74 72 69 65 76 69 6e  ecls,v.retrievin
1f60: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 39 34 2e  g revision 1.94.
1f70: 32 2e 32 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d  2.2.diff -w -u -
1f80: 72 31 2e 39 34 2e 32 2e 32 20 74 63 6c 2e 64 65  r1.94.2.2 tcl.de
1f90: 63 6c 73 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f  cls.--- generic/
1fa0: 74 63 6c 2e 64 65 63 6c 73 09 31 33 20 4d 61 79  tcl.decls.13 May
1fb0: 20 32 30 30 33 20 30 39 3a 35 37 3a 34 30 20 2d   2003 09:57:40 -
1fc0: 30 30 30 30 09 31 2e 39 34 2e 32 2e 32 0a 2b 2b  0000.1.94.2.2.++
1fd0: 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e 64 65  + generic/tcl.de
1fe0: 63 6c 73 09 32 37 20 4a 61 6e 20 32 30 30 35 20  cls.27 Jan 2005 
1ff0: 32 32 3a 34 39 3a 31 38 20 2d 30 30 30 30 0a 40  22:49:18 -0000.@
2000: 40 20 2d 31 37 35 34 2c 36 20 2b 31 37 35 34 2c  @ -1754,6 +1754,
2010: 32 34 20 40 40 0a 20 09 20 20 20 20 54 63 6c 5f  24 @@. .    Tcl_
2020: 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a 63 68 61  ChannelType *cha
2030: 6e 54 79 70 65 50 74 72 29 0a 20 7d 0a 20 0a 2b  nTypePtr). }. .+
2040: 23 20 53 6c 6f 74 73 20 34 39 34 20 74 6f 20 35  # Slots 494 to 5
2050: 35 33 20 61 72 65 20 74 61 6b 65 6e 20 61 6c 72  53 are taken alr
2060: 65 61 64 79 20 62 79 20 38 2e 35 0a 2b 23 20 23  eady by 8.5.+# #
2070: 31 31 31 20 2d 20 44 69 63 74 73 20 20 20 20 20  111 - Dicts     
2080: 20 20 20 20 20 20 20 28 34 39 34 20 2e 2e 2e 20         (494 ... 
2090: 35 30 34 29 0a 2b 23 20 20 23 35 39 20 2d 20 43  504).+#  #59 - C
20a0: 6f 6e 66 69 67 20 20 20 20 20 20 20 20 20 20 20  onfig           
20b0: 28 35 30 35 29 0a 2b 23 20 23 31 33 39 20 2d 20  (505).+# #139 - 
20c0: 4e 61 6d 65 73 70 61 63 65 20 41 50 49 20 20 20  Namespace API   
20d0: 20 28 35 30 36 20 2e 2e 2e 20 35 31 37 29 0a 2b   (506 ... 517).+
20e0: 23 20 23 31 33 37 20 2d 20 73 6f 75 72 63 65 20  # #137 - source 
20f0: 2d 65 6e 63 6f 64 69 6e 67 20 28 35 31 38 29 0a  -encoding (518).
2100: 2b 23 20 23 31 32 31 20 2d 20 45 78 69 74 50 72  +# #121 - ExitPr
2110: 6f 63 20 20 20 20 20 20 20 20 20 28 35 31 39 29  oc         (519)
2120: 0a 2b 23 20 23 31 32 31 20 2d 20 52 65 73 6f 75  .+# #121 - Resou
2130: 72 63 65 20 4c 69 6d 69 74 73 20 20 28 35 32 30  rce Limits  (520
2140: 20 2e 2e 2e 20 35 33 34 29 0a 2b 23 20 23 32 32   ... 534).+# #22
2150: 36 20 2d 20 53 2f 52 20 49 6e 74 65 72 70 20 53  6 - S/R Interp S
2160: 74 61 74 65 20 28 35 33 35 20 2e 2e 2e 20 35 33  tate (535 ... 53
2170: 37 29 0a 2b 23 20 23 32 32 37 20 2d 20 53 2f 47  7).+# #227 - S/G
2180: 20 52 65 74 75 72 6e 20 4f 70 74 73 20 20 28 35   Return Opts  (5
2190: 33 38 20 2e 2e 2e 20 35 33 39 29 0a 2b 23 20 23  38 ... 539).+# #
21a0: 32 33 35 20 2d 20 45 6e 73 65 6d 62 6c 65 20 43  235 - Ensemble C
21b0: 20 41 50 49 20 20 20 28 35 34 30 20 2e 2e 2e 20   API   (540 ... 
21c0: 35 35 31 29 0a 2b 23 20 23 32 33 33 20 2d 20 56  551).+# #233 - V
21d0: 69 72 74 75 61 6c 69 7a 65 64 20 54 69 6d 65 20  irtualized Time 
21e0: 28 35 35 32 20 2e 2e 2e 20 35 35 33 29 0a 2b 0a  (552 ... 553).+.
21f0: 2b 23 20 54 49 50 23 32 31 38 20 28 44 72 69 76  +# TIP#218 (Driv
2200: 65 72 20 54 68 72 65 61 64 20 41 63 74 69 6f 6e  er Thread Action
2210: 73 29 20 64 61 76 79 67 72 76 79 2f 61 6b 75 70  s) davygrvy/akup
2220: 72 69 65 73 20 43 68 61 6e 6e 65 6c 54 79 70 65  ries ChannelType
2230: 20 76 65 72 20 34 0a 2b 23 20 54 68 65 73 65 20   ver 4.+# These 
2240: 73 6c 6f 74 73 20 61 72 65 20 75 73 65 64 20 62  slots are used b
2250: 79 20 38 2e 35 20 61 73 20 77 65 6c 6c 2e 0a 2b  y 8.5 as well..+
2260: 64 65 63 6c 61 72 65 20 35 35 34 20 67 65 6e 65  declare 554 gene
2270: 72 69 63 20 7b 0a 2b 20 20 20 20 54 63 6c 5f 44  ric {.+    Tcl_D
2280: 72 69 76 65 72 54 68 72 65 61 64 41 63 74 69 6f  riverThreadActio
2290: 6e 50 72 6f 63 20 2a 54 63 6c 5f 43 68 61 6e 6e  nProc *Tcl_Chann
22a0: 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72  elThreadActionPr
22b0: 6f 63 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79  oc(Tcl_ChannelTy
22c0: 70 65 20 2a 63 68 61 6e 54 79 70 65 50 74 72 29  pe *chanTypePtr)
22d0: 0a 2b 7d 0a 2b 0a 20 23 23 23 23 23 23 23 23 23  .+}.+. #########
22e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2320: 23 23 23 23 23 0a 20 0a 20 23 20 44 65 66 69 6e  #####. . # Defin
2330: 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 73  e the platform s
2340: 70 65 63 69 66 69 63 20 70 75 62 6c 69 63 20 54  pecific public T
2350: 63 6c 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54  cl interface.  T
2360: 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  hese functions a
2370: 72 65 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69  re.Index: generi
2380: 63 2f 74 63 6c 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d  c/tcl.h.========
2390: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
23a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
23b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
23c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20  ===========.RCS 
23d0: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74  file: /cvsroot/t
23e0: 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74  cl/tcl/generic/t
23f0: 63 6c 2e 68 2c 76 0a 72 65 74 72 69 65 76 69 6e  cl.h,v.retrievin
2400: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 35 33  g revision 1.153
2410: 2e 32 2e 31 36 0a 64 69 66 66 20 2d 77 20 2d 75  .2.16.diff -w -u
2420: 20 2d 72 31 2e 31 35 33 2e 32 2e 31 36 20 74 63   -r1.153.2.16 tc
2430: 6c 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f  l.h.--- generic/
2440: 74 63 6c 2e 68 09 32 35 20 4e 6f 76 20 32 30 30  tcl.h.25 Nov 200
2450: 34 20 30 30 3a 31 39 3a 32 37 20 2d 30 30 30 30  4 00:19:27 -0000
2460: 09 31 2e 31 35 33 2e 32 2e 31 36 0a 2b 2b 2b 20  .1.153.2.16.+++ 
2470: 67 65 6e 65 72 69 63 2f 74 63 6c 2e 68 09 32 37  generic/tcl.h.27
2480: 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a   Jan 2005 22:49:
2490: 31 38 20 2d 30 30 30 30 0a 40 40 20 2d 31 34 32  18 -0000.@@ -142
24a0: 35 2c 36 20 2b 31 34 32 35 2c 31 34 20 40 40 0a  5,6 +1425,14 @@.
24b0: 20 23 64 65 66 69 6e 65 20 54 43 4c 5f 43 48 41   #define TCL_CHA
24c0: 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 31 09 28  NNEL_VERSION_1.(
24d0: 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65  (Tcl_ChannelType
24e0: 56 65 72 73 69 6f 6e 29 20 30 78 31 29 0a 20 23  Version) 0x1). #
24f0: 64 65 66 69 6e 65 20 54 43 4c 5f 43 48 41 4e 4e  define TCL_CHANN
2500: 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 09 28 28 54  EL_VERSION_2.((T
2510: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 56 65  cl_ChannelTypeVe
2520: 72 73 69 6f 6e 29 20 30 78 32 29 0a 20 23 64 65  rsion) 0x2). #de
2530: 66 69 6e 65 20 54 43 4c 5f 43 48 41 4e 4e 45 4c  fine TCL_CHANNEL
2540: 5f 56 45 52 53 49 4f 4e 5f 33 09 28 28 54 63 6c  _VERSION_3.((Tcl
2550: 5f 43 68 61 6e 6e 65 6c 54 79 70 65 56 65 72 73  _ChannelTypeVers
2560: 69 6f 6e 29 20 30 78 33 29 0a 2b 23 64 65 66 69  ion) 0x3).+#defi
2570: 6e 65 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56  ne TCL_CHANNEL_V
2580: 45 52 53 49 4f 4e 5f 34 09 28 28 54 63 6c 5f 43  ERSION_4.((Tcl_C
2590: 68 61 6e 6e 65 6c 54 79 70 65 56 65 72 73 69 6f  hannelTypeVersio
25a0: 6e 29 20 30 78 34 29 0a 2b 0a 2b 2f 2a 0a 2b 20  n) 0x4).+.+/*.+ 
25b0: 2a 20 54 49 50 20 23 32 31 38 3a 20 43 68 61 6e  * TIP #218: Chan
25c0: 6e 65 6c 20 41 63 74 69 6f 6e 73 2c 20 49 64 73  nel Actions, Ids
25d0: 20 66 6f 72 20 54 63 6c 5f 44 72 69 76 65 72 54   for Tcl_DriverT
25e0: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 0a  hreadActionProc.
25f0: 2b 20 2a 2f 0a 2b 0a 2b 23 64 65 66 69 6e 65 20  + */.+.+#define 
2600: 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 48 52 45  TCL_CHANNEL_THRE
2610: 41 44 5f 49 4e 53 45 52 54 20 28 30 29 0a 2b 23  AD_INSERT (0).+#
2620: 64 65 66 69 6e 65 20 54 43 4c 5f 43 48 41 4e 4e  define TCL_CHANN
2630: 45 4c 5f 54 48 52 45 41 44 5f 52 45 4d 4f 56 45  EL_THREAD_REMOVE
2640: 20 28 31 29 0a 20 0a 20 2f 2a 0a 20 20 2a 20 54   (1). . /*.  * T
2650: 79 70 65 64 65 66 73 20 66 6f 72 20 74 68 65 20  ypedefs for the 
2660: 76 61 72 69 6f 75 73 20 6f 70 65 72 61 74 69 6f  various operatio
2670: 6e 73 20 69 6e 20 61 20 63 68 61 6e 6e 65 6c 20  ns in a channel 
2680: 74 79 70 65 3a 0a 40 40 20 2d 31 34 36 30 2c 36  type:.@@ -1460,6
2690: 20 2b 31 34 36 38 2c 39 20 40 40 0a 20 09 09 20   +1468,9 @@. .. 
26a0: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e     ClientData in
26b0: 73 74 61 6e 63 65 44 61 74 61 2c 20 54 63 6c 5f  stanceData, Tcl_
26c0: 57 69 64 65 49 6e 74 20 6f 66 66 73 65 74 2c 0a  WideInt offset,.
26d0: 20 09 09 20 20 20 20 69 6e 74 20 6d 6f 64 65 2c   ..    int mode,
26e0: 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 50   int *errorCodeP
26f0: 74 72 29 29 3b 0a 20 0a 2b 20 20 2f 2a 20 54 49  tr));. .+  /* TI
2700: 50 20 23 32 31 38 2c 20 43 68 61 6e 6e 65 6c 20  P #218, Channel 
2710: 54 68 72 65 61 64 20 41 63 74 69 6f 6e 73 20 2a  Thread Actions *
2720: 2f 0a 2b 74 79 70 65 64 65 66 20 76 6f 69 64 20  /.+typedef void 
2730: 20 20 20 20 28 54 63 6c 5f 44 72 69 76 65 72 54      (Tcl_DriverT
2740: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 29  hreadActionProc)
2750: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 20 28 28 0a   _ANSI_ARGS_ ((.
2760: 2b 09 09 20 20 20 20 43 6c 69 65 6e 74 44 61 74  +..    ClientDat
2770: 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 20  a instanceData, 
2780: 69 6e 74 20 61 63 74 69 6f 6e 29 29 3b 0a 20 0a  int action));. .
2790: 20 2f 2a 0a 20 20 2a 20 54 68 65 20 66 6f 6c 6c   /*.  * The foll
27a0: 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f  owing declaratio
27b0: 6e 73 20 65 69 74 68 65 72 20 6d 61 70 20 63 6b  ns either map ck
27c0: 61 6c 6c 6f 63 20 61 6e 64 20 63 6b 66 72 65 65  alloc and ckfree
27d0: 20 74 6f 0a 40 40 20 2d 31 35 35 30 2c 36 20 2b   to.@@ -1550,6 +
27e0: 31 35 36 31 2c 31 36 20 40 40 0a 20 09 09 09 09  1561,16 @@. ....
27f0: 09 20 2a 20 68 61 6e 64 6c 65 20 36 34 2d 62 69  . * handle 64-bi
2800: 74 20 6f 66 66 73 65 74 73 2e 20 4d 61 79 20 62  t offsets. May b
2810: 65 0a 20 09 09 09 09 09 20 2a 20 4e 55 4c 4c 2c  e. ..... * NULL,
2820: 20 61 6e 64 20 6d 75 73 74 20 62 65 20 4e 55 4c   and must be NUL
2830: 4c 20 69 66 0a 20 09 09 09 09 09 20 2a 20 73 65  L if. ..... * se
2840: 65 6b 50 72 6f 63 20 69 73 20 4e 55 4c 4c 2e 20  ekProc is NULL. 
2850: 2a 2f 0a 2b 0a 2b 20 20 20 20 20 2f 2a 0a 2b 20  */.+.+     /*.+ 
2860: 20 20 20 20 20 2a 20 4f 6e 6c 79 20 76 61 6c 69       * Only vali
2870: 64 20 69 6e 20 54 43 4c 5f 43 48 41 4e 4e 45 4c  d in TCL_CHANNEL
2880: 5f 56 45 52 53 49 4f 4e 5f 34 20 63 68 61 6e 6e  _VERSION_4 chann
2890: 65 6c 73 20 6f 72 20 6c 61 74 65 72 0a 2b 20 20  els or later.+  
28a0: 20 20 20 20 2a 20 54 49 50 20 23 32 31 38 2c 20      * TIP #218, 
28b0: 43 68 61 6e 6e 65 6c 20 54 68 72 65 61 64 20 41  Channel Thread A
28c0: 63 74 69 6f 6e 73 0a 2b 20 20 20 20 20 20 2a 2f  ctions.+      */
28d0: 0a 2b 20 20 20 20 20 54 63 6c 5f 44 72 69 76 65  .+     Tcl_Drive
28e0: 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f  rThreadActionPro
28f0: 63 20 2a 74 68 72 65 61 64 41 63 74 69 6f 6e 50  c *threadActionP
2900: 72 6f 63 3b 0a 2b 20 09 09 09 09 09 2f 2a 20 50  roc;.+ ...../* P
2910: 72 6f 63 65 64 75 72 65 20 74 6f 20 63 61 6c 6c  rocedure to call
2920: 20 74 6f 20 6e 6f 74 69 66 79 0a 2b 20 09 09 09   to notify.+ ...
2930: 09 09 20 2a 20 74 68 65 20 64 72 69 76 65 72 20  .. * the driver 
2940: 6f 66 20 74 68 72 65 61 64 20 73 70 65 63 69 66  of thread specif
2950: 69 63 0a 2b 20 09 09 09 09 09 20 2a 20 61 63 74  ic.+ ..... * act
2960: 69 76 69 74 79 20 66 6f 72 20 61 20 63 68 61 6e  ivity for a chan
2970: 6e 65 6c 2e 0a 2b 09 09 09 09 09 20 2a 20 4d 61  nel..+..... * Ma
2980: 79 20 62 65 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 7d  y be NULL. */. }
2990: 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65   Tcl_ChannelType
29a0: 3b 0a 20 0a 20 2f 2a 0a 49 6e 64 65 78 3a 20 67  ;. . /*.Index: g
29b0: 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c 73 2e  eneric/tclDecls.
29c0: 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  h.==============
29d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
29e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
29f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2a00: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20  =====.RCS file: 
2a10: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c  /cvsroot/tcl/tcl
2a20: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c  /generic/tclDecl
2a30: 73 2e 68 2c 76 0a 72 65 74 72 69 65 76 69 6e 67  s.h,v.retrieving
2a40: 20 72 65 76 69 73 69 6f 6e 20 31 2e 39 33 2e 32   revision 1.93.2
2a50: 2e 35 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 72  .5.diff -w -u -r
2a60: 31 2e 39 33 2e 32 2e 35 20 74 63 6c 44 65 63 6c  1.93.2.5 tclDecl
2a70: 73 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f  s.h.--- generic/
2a80: 74 63 6c 44 65 63 6c 73 2e 68 09 31 30 20 4a 75  tclDecls.h.10 Ju
2a90: 6e 20 32 30 30 34 20 31 37 3a 31 37 3a 34 32 20  n 2004 17:17:42 
2aa0: 2d 30 30 30 30 09 31 2e 39 33 2e 32 2e 35 0a 2b  -0000.1.93.2.5.+
2ab0: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 44 65  ++ generic/tclDe
2ac0: 63 6c 73 2e 68 09 32 37 20 4a 61 6e 20 32 30 30  cls.h.27 Jan 200
2ad0: 35 20 32 32 3a 34 39 3a 31 38 20 2d 30 30 30 30  5 22:49:18 -0000
2ae0: 0a 40 40 20 2d 31 35 36 34 2c 36 20 2b 31 35 36  .@@ -1564,6 +156
2af0: 34 2c 36 39 20 40 40 0a 20 2f 2a 20 34 39 33 20  4,69 @@. /* 493 
2b00: 2a 2f 0a 20 45 58 54 45 52 4e 20 54 63 6c 5f 44  */. EXTERN Tcl_D
2b10: 72 69 76 65 72 57 69 64 65 53 65 65 6b 50 72 6f  riverWideSeekPro
2b20: 63 20 2a 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 57  c * Tcl_ChannelW
2b30: 69 64 65 53 65 65 6b 50 72 6f 63 20 5f 41 4e 53  ideSeekProc _ANS
2b40: 49 5f 41 52 47 53 5f 28 28 0a 20 09 09 09 09 54  I_ARGS_((. ....T
2b50: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a  cl_ChannelType *
2b60: 20 63 68 61 6e 54 79 70 65 50 74 72 29 29 3b 0a   chanTypePtr));.
2b70: 2b 2f 2a 20 53 6c 6f 74 20 34 39 34 20 69 73 20  +/* Slot 494 is 
2b80: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2b90: 53 6c 6f 74 20 34 39 35 20 69 73 20 72 65 73 65  Slot 495 is rese
2ba0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2bb0: 20 34 39 36 20 69 73 20 72 65 73 65 72 76 65 64   496 is reserved
2bc0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 34 39 37   */.+/* Slot 497
2bd0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2be0: 2b 2f 2a 20 53 6c 6f 74 20 34 39 38 20 69 73 20  +/* Slot 498 is 
2bf0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2c00: 53 6c 6f 74 20 34 39 39 20 69 73 20 72 65 73 65  Slot 499 is rese
2c10: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2c20: 20 35 30 30 20 69 73 20 72 65 73 65 72 76 65 64   500 is reserved
2c30: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 31   */.+/* Slot 501
2c40: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2c50: 2b 2f 2a 20 53 6c 6f 74 20 35 30 32 20 69 73 20  +/* Slot 502 is 
2c60: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2c70: 53 6c 6f 74 20 35 30 33 20 69 73 20 72 65 73 65  Slot 503 is rese
2c80: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2c90: 20 35 30 34 20 69 73 20 72 65 73 65 72 76 65 64   504 is reserved
2ca0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 35   */.+/* Slot 505
2cb0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2cc0: 2b 2f 2a 20 53 6c 6f 74 20 35 30 36 20 69 73 20  +/* Slot 506 is 
2cd0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2ce0: 53 6c 6f 74 20 35 30 37 20 69 73 20 72 65 73 65  Slot 507 is rese
2cf0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2d00: 20 35 30 38 20 69 73 20 72 65 73 65 72 76 65 64   508 is reserved
2d10: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 39   */.+/* Slot 509
2d20: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2d30: 2b 2f 2a 20 53 6c 6f 74 20 35 31 30 20 69 73 20  +/* Slot 510 is 
2d40: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2d50: 53 6c 6f 74 20 35 31 31 20 69 73 20 72 65 73 65  Slot 511 is rese
2d60: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2d70: 20 35 31 32 20 69 73 20 72 65 73 65 72 76 65 64   512 is reserved
2d80: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 31 33   */.+/* Slot 513
2d90: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2da0: 2b 2f 2a 20 53 6c 6f 74 20 35 31 34 20 69 73 20  +/* Slot 514 is 
2db0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2dc0: 53 6c 6f 74 20 35 31 35 20 69 73 20 72 65 73 65  Slot 515 is rese
2dd0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2de0: 20 35 31 36 20 69 73 20 72 65 73 65 72 76 65 64   516 is reserved
2df0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 31 37   */.+/* Slot 517
2e00: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2e10: 2b 2f 2a 20 53 6c 6f 74 20 35 31 38 20 69 73 20  +/* Slot 518 is 
2e20: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2e30: 53 6c 6f 74 20 35 31 39 20 69 73 20 72 65 73 65  Slot 519 is rese
2e40: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2e50: 20 35 32 30 20 69 73 20 72 65 73 65 72 76 65 64   520 is reserved
2e60: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 31   */.+/* Slot 521
2e70: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2e80: 2b 2f 2a 20 53 6c 6f 74 20 35 32 32 20 69 73 20  +/* Slot 522 is 
2e90: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2ea0: 53 6c 6f 74 20 35 32 33 20 69 73 20 72 65 73 65  Slot 523 is rese
2eb0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2ec0: 20 35 32 34 20 69 73 20 72 65 73 65 72 76 65 64   524 is reserved
2ed0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 35   */.+/* Slot 525
2ee0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2ef0: 2b 2f 2a 20 53 6c 6f 74 20 35 32 36 20 69 73 20  +/* Slot 526 is 
2f00: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2f10: 53 6c 6f 74 20 35 32 37 20 69 73 20 72 65 73 65  Slot 527 is rese
2f20: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2f30: 20 35 32 38 20 69 73 20 72 65 73 65 72 76 65 64   528 is reserved
2f40: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 39   */.+/* Slot 529
2f50: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2f60: 2b 2f 2a 20 53 6c 6f 74 20 35 33 30 20 69 73 20  +/* Slot 530 is 
2f70: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2f80: 53 6c 6f 74 20 35 33 31 20 69 73 20 72 65 73 65  Slot 531 is rese
2f90: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
2fa0: 20 35 33 32 20 69 73 20 72 65 73 65 72 76 65 64   532 is reserved
2fb0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 33 33   */.+/* Slot 533
2fc0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
2fd0: 2b 2f 2a 20 53 6c 6f 74 20 35 33 34 20 69 73 20  +/* Slot 534 is 
2fe0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
2ff0: 53 6c 6f 74 20 35 33 35 20 69 73 20 72 65 73 65  Slot 535 is rese
3000: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3010: 20 35 33 36 20 69 73 20 72 65 73 65 72 76 65 64   536 is reserved
3020: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 33 37   */.+/* Slot 537
3030: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3040: 2b 2f 2a 20 53 6c 6f 74 20 35 33 38 20 69 73 20  +/* Slot 538 is 
3050: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3060: 53 6c 6f 74 20 35 33 39 20 69 73 20 72 65 73 65  Slot 539 is rese
3070: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3080: 20 35 34 30 20 69 73 20 72 65 73 65 72 76 65 64   540 is reserved
3090: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 31   */.+/* Slot 541
30a0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
30b0: 2b 2f 2a 20 53 6c 6f 74 20 35 34 32 20 69 73 20  +/* Slot 542 is 
30c0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
30d0: 53 6c 6f 74 20 35 34 33 20 69 73 20 72 65 73 65  Slot 543 is rese
30e0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
30f0: 20 35 34 34 20 69 73 20 72 65 73 65 72 76 65 64   544 is reserved
3100: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 35   */.+/* Slot 545
3110: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3120: 2b 2f 2a 20 53 6c 6f 74 20 35 34 36 20 69 73 20  +/* Slot 546 is 
3130: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3140: 53 6c 6f 74 20 35 34 37 20 69 73 20 72 65 73 65  Slot 547 is rese
3150: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3160: 20 35 34 38 20 69 73 20 72 65 73 65 72 76 65 64   548 is reserved
3170: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 39   */.+/* Slot 549
3180: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3190: 2b 2f 2a 20 53 6c 6f 74 20 35 35 30 20 69 73 20  +/* Slot 550 is 
31a0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
31b0: 53 6c 6f 74 20 35 35 31 20 69 73 20 72 65 73 65  Slot 551 is rese
31c0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
31d0: 20 35 35 32 20 69 73 20 72 65 73 65 72 76 65 64   552 is reserved
31e0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 35 33   */.+/* Slot 553
31f0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3200: 2b 2f 2a 20 35 35 34 20 2a 2f 0a 2b 45 58 54 45  +/* 554 */.+EXTE
3210: 52 4e 20 54 63 6c 5f 44 72 69 76 65 72 54 68 72  RN Tcl_DriverThr
3220: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2a 20  eadActionProc * 
3230: 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61  Tcl_ChannelThrea
3240: 64 41 63 74 69 6f 6e 50 72 6f 63 20 5f 41 4e 53  dActionProc _ANS
3250: 49 5f 41 52 47 53 5f 28 28 0a 2b 09 09 09 09 54  I_ARGS_((.+....T
3260: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a  cl_ChannelType *
3270: 20 63 68 61 6e 54 79 70 65 50 74 72 29 29 3b 0a   chanTypePtr));.
3280: 20 0a 20 74 79 70 65 64 65 66 20 73 74 72 75 63   . typedef struc
3290: 74 20 54 63 6c 53 74 75 62 48 6f 6f 6b 73 20 7b  t TclStubHooks {
32a0: 0a 20 20 20 20 20 73 74 72 75 63 74 20 54 63 6c  .     struct Tcl
32b0: 50 6c 61 74 53 74 75 62 73 20 2a 74 63 6c 50 6c  PlatStubs *tclPl
32c0: 61 74 53 74 75 62 73 3b 0a 40 40 20 2d 32 31 31  atStubs;.@@ -211
32d0: 37 2c 36 20 2b 32 31 38 30 2c 36 37 20 40 40 0a  7,6 +2180,67 @@.
32e0: 20 20 20 20 20 54 63 6c 5f 57 69 64 65 49 6e 74       Tcl_WideInt
32f0: 20 28 2a 74 63 6c 5f 53 65 65 6b 29 20 5f 41 4e   (*tcl_Seek) _AN
3300: 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 43 68  SI_ARGS_((Tcl_Ch
3310: 61 6e 6e 65 6c 20 63 68 61 6e 2c 20 54 63 6c 5f  annel chan, Tcl_
3320: 57 69 64 65 49 6e 74 20 6f 66 66 73 65 74 2c 20  WideInt offset, 
3330: 69 6e 74 20 6d 6f 64 65 29 29 3b 20 2f 2a 20 34  int mode)); /* 4
3340: 39 31 20 2a 2f 0a 20 20 20 20 20 54 63 6c 5f 57  91 */.     Tcl_W
3350: 69 64 65 49 6e 74 20 28 2a 74 63 6c 5f 54 65 6c  ideInt (*tcl_Tel
3360: 6c 29 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28  l) _ANSI_ARGS_((
3370: 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e  Tcl_Channel chan
3380: 29 29 3b 20 2f 2a 20 34 39 32 20 2a 2f 0a 20 20  )); /* 492 */.  
3390: 20 20 20 54 63 6c 5f 44 72 69 76 65 72 57 69 64     Tcl_DriverWid
33a0: 65 53 65 65 6b 50 72 6f 63 20 2a 20 28 2a 74 63  eSeekProc * (*tc
33b0: 6c 5f 43 68 61 6e 6e 65 6c 57 69 64 65 53 65 65  l_ChannelWideSee
33c0: 6b 50 72 6f 63 29 20 5f 41 4e 53 49 5f 41 52 47  kProc) _ANSI_ARG
33d0: 53 5f 28 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54  S_((Tcl_ChannelT
33e0: 79 70 65 20 2a 20 63 68 61 6e 54 79 70 65 50 74  ype * chanTypePt
33f0: 72 29 29 3b 20 2f 2a 20 34 39 33 20 2a 2f 0a 2b  r)); /* 493 */.+
3400: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3410: 65 64 34 39 34 3b 0a 2b 20 20 20 20 76 6f 69 64  ed494;.+    void
3420: 20 2a 72 65 73 65 72 76 65 64 34 39 35 3b 0a 2b   *reserved495;.+
3430: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3440: 65 64 34 39 36 3b 0a 2b 20 20 20 20 76 6f 69 64  ed496;.+    void
3450: 20 2a 72 65 73 65 72 76 65 64 34 39 37 3b 0a 2b   *reserved497;.+
3460: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3470: 65 64 34 39 38 3b 0a 2b 20 20 20 20 76 6f 69 64  ed498;.+    void
3480: 20 2a 72 65 73 65 72 76 65 64 34 39 39 3b 0a 2b   *reserved499;.+
3490: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
34a0: 65 64 35 30 30 3b 0a 2b 20 20 20 20 76 6f 69 64  ed500;.+    void
34b0: 20 2a 72 65 73 65 72 76 65 64 35 30 31 3b 0a 2b   *reserved501;.+
34c0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
34d0: 65 64 35 30 32 3b 0a 2b 20 20 20 20 76 6f 69 64  ed502;.+    void
34e0: 20 2a 72 65 73 65 72 76 65 64 35 30 33 3b 0a 2b   *reserved503;.+
34f0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3500: 65 64 35 30 34 3b 0a 2b 20 20 20 20 76 6f 69 64  ed504;.+    void
3510: 20 2a 72 65 73 65 72 76 65 64 35 30 35 3b 0a 2b   *reserved505;.+
3520: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3530: 65 64 35 30 36 3b 0a 2b 20 20 20 20 76 6f 69 64  ed506;.+    void
3540: 20 2a 72 65 73 65 72 76 65 64 35 30 37 3b 0a 2b   *reserved507;.+
3550: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3560: 65 64 35 30 38 3b 0a 2b 20 20 20 20 76 6f 69 64  ed508;.+    void
3570: 20 2a 72 65 73 65 72 76 65 64 35 30 39 3b 0a 2b   *reserved509;.+
3580: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3590: 65 64 35 31 30 3b 0a 2b 20 20 20 20 76 6f 69 64  ed510;.+    void
35a0: 20 2a 72 65 73 65 72 76 65 64 35 31 31 3b 0a 2b   *reserved511;.+
35b0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
35c0: 65 64 35 31 32 3b 0a 2b 20 20 20 20 76 6f 69 64  ed512;.+    void
35d0: 20 2a 72 65 73 65 72 76 65 64 35 31 33 3b 0a 2b   *reserved513;.+
35e0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
35f0: 65 64 35 31 34 3b 0a 2b 20 20 20 20 76 6f 69 64  ed514;.+    void
3600: 20 2a 72 65 73 65 72 76 65 64 35 31 35 3b 0a 2b   *reserved515;.+
3610: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3620: 65 64 35 31 36 3b 0a 2b 20 20 20 20 76 6f 69 64  ed516;.+    void
3630: 20 2a 72 65 73 65 72 76 65 64 35 31 37 3b 0a 2b   *reserved517;.+
3640: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3650: 65 64 35 31 38 3b 0a 2b 20 20 20 20 76 6f 69 64  ed518;.+    void
3660: 20 2a 72 65 73 65 72 76 65 64 35 31 39 3b 0a 2b   *reserved519;.+
3670: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3680: 65 64 35 32 30 3b 0a 2b 20 20 20 20 76 6f 69 64  ed520;.+    void
3690: 20 2a 72 65 73 65 72 76 65 64 35 32 31 3b 0a 2b   *reserved521;.+
36a0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
36b0: 65 64 35 32 32 3b 0a 2b 20 20 20 20 76 6f 69 64  ed522;.+    void
36c0: 20 2a 72 65 73 65 72 76 65 64 35 32 33 3b 0a 2b   *reserved523;.+
36d0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
36e0: 65 64 35 32 34 3b 0a 2b 20 20 20 20 76 6f 69 64  ed524;.+    void
36f0: 20 2a 72 65 73 65 72 76 65 64 35 32 35 3b 0a 2b   *reserved525;.+
3700: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3710: 65 64 35 32 36 3b 0a 2b 20 20 20 20 76 6f 69 64  ed526;.+    void
3720: 20 2a 72 65 73 65 72 76 65 64 35 32 37 3b 0a 2b   *reserved527;.+
3730: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3740: 65 64 35 32 38 3b 0a 2b 20 20 20 20 76 6f 69 64  ed528;.+    void
3750: 20 2a 72 65 73 65 72 76 65 64 35 32 39 3b 0a 2b   *reserved529;.+
3760: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3770: 65 64 35 33 30 3b 0a 2b 20 20 20 20 76 6f 69 64  ed530;.+    void
3780: 20 2a 72 65 73 65 72 76 65 64 35 33 31 3b 0a 2b   *reserved531;.+
3790: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
37a0: 65 64 35 33 32 3b 0a 2b 20 20 20 20 76 6f 69 64  ed532;.+    void
37b0: 20 2a 72 65 73 65 72 76 65 64 35 33 33 3b 0a 2b   *reserved533;.+
37c0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
37d0: 65 64 35 33 34 3b 0a 2b 20 20 20 20 76 6f 69 64  ed534;.+    void
37e0: 20 2a 72 65 73 65 72 76 65 64 35 33 35 3b 0a 2b   *reserved535;.+
37f0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3800: 65 64 35 33 36 3b 0a 2b 20 20 20 20 76 6f 69 64  ed536;.+    void
3810: 20 2a 72 65 73 65 72 76 65 64 35 33 37 3b 0a 2b   *reserved537;.+
3820: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3830: 65 64 35 33 38 3b 0a 2b 20 20 20 20 76 6f 69 64  ed538;.+    void
3840: 20 2a 72 65 73 65 72 76 65 64 35 33 39 3b 0a 2b   *reserved539;.+
3850: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3860: 65 64 35 34 30 3b 0a 2b 20 20 20 20 76 6f 69 64  ed540;.+    void
3870: 20 2a 72 65 73 65 72 76 65 64 35 34 31 3b 0a 2b   *reserved541;.+
3880: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3890: 65 64 35 34 32 3b 0a 2b 20 20 20 20 76 6f 69 64  ed542;.+    void
38a0: 20 2a 72 65 73 65 72 76 65 64 35 34 33 3b 0a 2b   *reserved543;.+
38b0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
38c0: 65 64 35 34 34 3b 0a 2b 20 20 20 20 76 6f 69 64  ed544;.+    void
38d0: 20 2a 72 65 73 65 72 76 65 64 35 34 35 3b 0a 2b   *reserved545;.+
38e0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
38f0: 65 64 35 34 36 3b 0a 2b 20 20 20 20 76 6f 69 64  ed546;.+    void
3900: 20 2a 72 65 73 65 72 76 65 64 35 34 37 3b 0a 2b   *reserved547;.+
3910: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3920: 65 64 35 34 38 3b 0a 2b 20 20 20 20 76 6f 69 64  ed548;.+    void
3930: 20 2a 72 65 73 65 72 76 65 64 35 34 39 3b 0a 2b   *reserved549;.+
3940: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3950: 65 64 35 35 30 3b 0a 2b 20 20 20 20 76 6f 69 64  ed550;.+    void
3960: 20 2a 72 65 73 65 72 76 65 64 35 35 31 3b 0a 2b   *reserved551;.+
3970: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76      void *reserv
3980: 65 64 35 35 32 3b 0a 2b 20 20 20 20 76 6f 69 64  ed552;.+    void
3990: 20 2a 72 65 73 65 72 76 65 64 35 35 33 3b 0a 2b   *reserved553;.+
39a0: 20 20 20 20 54 63 6c 5f 44 72 69 76 65 72 54 68      Tcl_DriverTh
39b0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2a  readActionProc *
39c0: 20 28 2a 74 63 6c 5f 43 68 61 6e 6e 65 6c 54 68   (*tcl_ChannelTh
39d0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 29 20  readActionProc) 
39e0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c  _ANSI_ARGS_((Tcl
39f0: 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a 20 63  _ChannelType * c
3a00: 68 61 6e 54 79 70 65 50 74 72 29 29 3b 20 2f 2a  hanTypePtr)); /*
3a10: 20 35 35 34 20 2a 2f 0a 20 7d 20 54 63 6c 53 74   554 */. } TclSt
3a20: 75 62 73 3b 0a 20 0a 20 23 69 66 64 65 66 20 5f  ubs;. . #ifdef _
3a30: 5f 63 70 6c 75 73 70 6c 75 73 0a 40 40 20 2d 34  _cplusplus.@@ -4
3a40: 31 33 33 2c 36 20 2b 34 32 35 37 2c 37 30 20 40  133,6 +4257,70 @
3a50: 40 0a 20 23 64 65 66 69 6e 65 20 54 63 6c 5f 43  @. #define Tcl_C
3a60: 68 61 6e 6e 65 6c 57 69 64 65 53 65 65 6b 50 72  hannelWideSeekPr
3a70: 6f 63 20 5c 0a 20 09 28 74 63 6c 53 74 75 62 73  oc \. .(tclStubs
3a80: 50 74 72 2d 3e 74 63 6c 5f 43 68 61 6e 6e 65 6c  Ptr->tcl_Channel
3a90: 57 69 64 65 53 65 65 6b 50 72 6f 63 29 20 2f 2a  WideSeekProc) /*
3aa0: 20 34 39 33 20 2a 2f 0a 20 23 65 6e 64 69 66 0a   493 */. #endif.
3ab0: 2b 2f 2a 20 53 6c 6f 74 20 34 39 34 20 69 73 20  +/* Slot 494 is 
3ac0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3ad0: 53 6c 6f 74 20 34 39 35 20 69 73 20 72 65 73 65  Slot 495 is rese
3ae0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3af0: 20 34 39 36 20 69 73 20 72 65 73 65 72 76 65 64   496 is reserved
3b00: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 34 39 37   */.+/* Slot 497
3b10: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3b20: 2b 2f 2a 20 53 6c 6f 74 20 34 39 38 20 69 73 20  +/* Slot 498 is 
3b30: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3b40: 53 6c 6f 74 20 34 39 39 20 69 73 20 72 65 73 65  Slot 499 is rese
3b50: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3b60: 20 35 30 30 20 69 73 20 72 65 73 65 72 76 65 64   500 is reserved
3b70: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 31   */.+/* Slot 501
3b80: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3b90: 2b 2f 2a 20 53 6c 6f 74 20 35 30 32 20 69 73 20  +/* Slot 502 is 
3ba0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3bb0: 53 6c 6f 74 20 35 30 33 20 69 73 20 72 65 73 65  Slot 503 is rese
3bc0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3bd0: 20 35 30 34 20 69 73 20 72 65 73 65 72 76 65 64   504 is reserved
3be0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 35   */.+/* Slot 505
3bf0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3c00: 2b 2f 2a 20 53 6c 6f 74 20 35 30 36 20 69 73 20  +/* Slot 506 is 
3c10: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3c20: 53 6c 6f 74 20 35 30 37 20 69 73 20 72 65 73 65  Slot 507 is rese
3c30: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3c40: 20 35 30 38 20 69 73 20 72 65 73 65 72 76 65 64   508 is reserved
3c50: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 39   */.+/* Slot 509
3c60: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3c70: 2b 2f 2a 20 53 6c 6f 74 20 35 31 30 20 69 73 20  +/* Slot 510 is 
3c80: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3c90: 53 6c 6f 74 20 35 31 31 20 69 73 20 72 65 73 65  Slot 511 is rese
3ca0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3cb0: 20 35 31 32 20 69 73 20 72 65 73 65 72 76 65 64   512 is reserved
3cc0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 31 33   */.+/* Slot 513
3cd0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3ce0: 2b 2f 2a 20 53 6c 6f 74 20 35 31 34 20 69 73 20  +/* Slot 514 is 
3cf0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3d00: 53 6c 6f 74 20 35 31 35 20 69 73 20 72 65 73 65  Slot 515 is rese
3d10: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3d20: 20 35 31 36 20 69 73 20 72 65 73 65 72 76 65 64   516 is reserved
3d30: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 31 37   */.+/* Slot 517
3d40: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3d50: 2b 2f 2a 20 53 6c 6f 74 20 35 31 38 20 69 73 20  +/* Slot 518 is 
3d60: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3d70: 53 6c 6f 74 20 35 31 39 20 69 73 20 72 65 73 65  Slot 519 is rese
3d80: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3d90: 20 35 32 30 20 69 73 20 72 65 73 65 72 76 65 64   520 is reserved
3da0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 31   */.+/* Slot 521
3db0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3dc0: 2b 2f 2a 20 53 6c 6f 74 20 35 32 32 20 69 73 20  +/* Slot 522 is 
3dd0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3de0: 53 6c 6f 74 20 35 32 33 20 69 73 20 72 65 73 65  Slot 523 is rese
3df0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3e00: 20 35 32 34 20 69 73 20 72 65 73 65 72 76 65 64   524 is reserved
3e10: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 35   */.+/* Slot 525
3e20: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3e30: 2b 2f 2a 20 53 6c 6f 74 20 35 32 36 20 69 73 20  +/* Slot 526 is 
3e40: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3e50: 53 6c 6f 74 20 35 32 37 20 69 73 20 72 65 73 65  Slot 527 is rese
3e60: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3e70: 20 35 32 38 20 69 73 20 72 65 73 65 72 76 65 64   528 is reserved
3e80: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 39   */.+/* Slot 529
3e90: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3ea0: 2b 2f 2a 20 53 6c 6f 74 20 35 33 30 20 69 73 20  +/* Slot 530 is 
3eb0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3ec0: 53 6c 6f 74 20 35 33 31 20 69 73 20 72 65 73 65  Slot 531 is rese
3ed0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3ee0: 20 35 33 32 20 69 73 20 72 65 73 65 72 76 65 64   532 is reserved
3ef0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 33 33   */.+/* Slot 533
3f00: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3f10: 2b 2f 2a 20 53 6c 6f 74 20 35 33 34 20 69 73 20  +/* Slot 534 is 
3f20: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3f30: 53 6c 6f 74 20 35 33 35 20 69 73 20 72 65 73 65  Slot 535 is rese
3f40: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3f50: 20 35 33 36 20 69 73 20 72 65 73 65 72 76 65 64   536 is reserved
3f60: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 33 37   */.+/* Slot 537
3f70: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3f80: 2b 2f 2a 20 53 6c 6f 74 20 35 33 38 20 69 73 20  +/* Slot 538 is 
3f90: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
3fa0: 53 6c 6f 74 20 35 33 39 20 69 73 20 72 65 73 65  Slot 539 is rese
3fb0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
3fc0: 20 35 34 30 20 69 73 20 72 65 73 65 72 76 65 64   540 is reserved
3fd0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 31   */.+/* Slot 541
3fe0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
3ff0: 2b 2f 2a 20 53 6c 6f 74 20 35 34 32 20 69 73 20  +/* Slot 542 is 
4000: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
4010: 53 6c 6f 74 20 35 34 33 20 69 73 20 72 65 73 65  Slot 543 is rese
4020: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
4030: 20 35 34 34 20 69 73 20 72 65 73 65 72 76 65 64   544 is reserved
4040: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 35   */.+/* Slot 545
4050: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
4060: 2b 2f 2a 20 53 6c 6f 74 20 35 34 36 20 69 73 20  +/* Slot 546 is 
4070: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
4080: 53 6c 6f 74 20 35 34 37 20 69 73 20 72 65 73 65  Slot 547 is rese
4090: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
40a0: 20 35 34 38 20 69 73 20 72 65 73 65 72 76 65 64   548 is reserved
40b0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 39   */.+/* Slot 549
40c0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
40d0: 2b 2f 2a 20 53 6c 6f 74 20 35 35 30 20 69 73 20  +/* Slot 550 is 
40e0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20  reserved */.+/* 
40f0: 53 6c 6f 74 20 35 35 31 20 69 73 20 72 65 73 65  Slot 551 is rese
4100: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74  rved */.+/* Slot
4110: 20 35 35 32 20 69 73 20 72 65 73 65 72 76 65 64   552 is reserved
4120: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 35 33   */.+/* Slot 553
4130: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a   is reserved */.
4140: 2b 23 69 66 6e 64 65 66 20 54 63 6c 5f 43 68 61  +#ifndef Tcl_Cha
4150: 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e  nnelThreadAction
4160: 50 72 6f 63 0a 2b 23 64 65 66 69 6e 65 20 54 63  Proc.+#define Tc
4170: 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41  l_ChannelThreadA
4180: 63 74 69 6f 6e 50 72 6f 63 20 5c 0a 2b 09 28 74  ctionProc \.+.(t
4190: 63 6c 53 74 75 62 73 50 74 72 2d 3e 74 63 6c 5f  clStubsPtr->tcl_
41a0: 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74  ChannelThreadAct
41b0: 69 6f 6e 50 72 6f 63 29 20 2f 2a 20 35 35 34 20  ionProc) /* 554 
41c0: 2a 2f 0a 2b 23 65 6e 64 69 66 0a 20 0a 20 23 65  */.+#endif. . #e
41d0: 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 28  ndif /* defined(
41e0: 55 53 45 5f 54 43 4c 5f 53 54 55 42 53 29 20 26  USE_TCL_STUBS) &
41f0: 26 20 21 64 65 66 69 6e 65 64 28 55 53 45 5f 54  & !defined(USE_T
4200: 43 4c 5f 53 54 55 42 5f 50 52 4f 43 53 29 20 2a  CL_STUB_PROCS) *
4210: 2f 0a 20 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72  /. .Index: gener
4220: 69 63 2f 74 63 6c 49 4f 2e 63 0a 3d 3d 3d 3d 3d  ic/tclIO.c.=====
4230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4260: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52  ==============.R
4270: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f  CS file: /cvsroo
4280: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69  t/tcl/tcl/generi
4290: 63 2f 74 63 6c 49 4f 2e 63 2c 76 0a 72 65 74 72  c/tclIO.c,v.retr
42a0: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20  ieving revision 
42b0: 31 2e 36 31 2e 32 2e 38 0a 64 69 66 66 20 2d 77  1.61.2.8.diff -w
42c0: 20 2d 75 20 2d 72 31 2e 36 31 2e 32 2e 38 20 74   -u -r1.61.2.8 t
42d0: 63 6c 49 4f 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72  clIO.c.--- gener
42e0: 69 63 2f 74 63 6c 49 4f 2e 63 09 31 30 20 53 65  ic/tclIO.c.10 Se
42f0: 70 20 32 30 30 34 20 32 30 3a 30 36 3a 34 31 20  p 2004 20:06:41 
4300: 2d 30 30 30 30 09 31 2e 36 31 2e 32 2e 38 0a 2b  -0000.1.61.2.8.+
4310: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 4f  ++ generic/tclIO
4320: 2e 63 09 32 37 20 4a 61 6e 20 32 30 30 35 20 32  .c.27 Jan 2005 2
4330: 32 3a 34 39 3a 31 38 20 2d 30 30 30 30 0a 40 40  2:49:18 -0000.@@
4340: 20 2d 31 32 30 38 2c 31 38 20 2b 31 32 30 38 2c   -1208,18 +1208,
4350: 31 39 20 40 40 0a 20 20 20 20 20 20 2a 20 69 6e  19 @@.      * in
4360: 20 74 68 65 20 6c 69 73 74 20 6f 6e 20 65 78 69   the list on exi
4370: 74 2e 0a 20 20 20 20 20 20 2a 0a 20 20 20 20 20  t..      *.     
4380: 20 2a 20 4a 48 3a 20 43 6f 75 6c 64 20 63 61 6c   * JH: Could cal
4390: 6c 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 6e  l Tcl_SpliceChan
43a0: 6e 65 6c 2c 20 62 75 74 20 6e 65 65 64 20 74 6f  nel, but need to
43b0: 20 61 76 6f 69 64 20 4e 55 4c 4c 20 63 68 65 63   avoid NULL chec
43c0: 6b 2e 0a 2b 20 20 20 20 20 2a 0a 2b 20 20 20 20  k..+     *.+    
43d0: 20 2a 20 54 49 50 20 23 32 31 38 2e 0a 2b 20 20   * TIP #218..+  
43e0: 20 20 20 2a 20 41 4b 3a 20 4a 75 73 74 20 69 6e     * AK: Just in
43f0: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 66 69 65  itialize the fie
4400: 6c 64 20 74 6f 20 4e 55 4c 4c 20 62 65 66 6f 72  ld to NULL befor
4410: 65 20 69 6e 76 6f 6b 69 6e 67 20 54 63 6c 5f 53  e invoking Tcl_S
4420: 70 6c 69 63 65 43 68 61 6e 6e 65 6c 0a 2b 20 20  pliceChannel.+  
4430: 20 20 20 2a 20 20 20 20 20 57 65 20 6e 65 65 64     *     We need
4440: 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 6e 6e   Tcl_SpliceChann
4450: 65 6c 2c 20 66 6f 72 20 74 68 65 20 74 68 72 65  el, for the thre
4460: 61 64 41 63 74 69 6f 6e 20 63 61 6c 6c 73 2e 0a  adAction calls..
4470: 2b 20 20 20 20 20 2a 20 20 20 20 20 54 68 65 72  +     *     Ther
4480: 65 20 69 73 20 6e 6f 20 72 65 61 6c 20 72 65 61  e is no real rea
4490: 73 6f 6e 20 74 6f 20 64 75 70 6c 69 63 61 74 65  son to duplicate
44a0: 20 61 6c 6c 20 6f 66 20 74 68 69 73 2e 0a 2b 20   all of this..+ 
44b0: 20 20 20 20 2a 20 4e 4f 54 45 3a 20 41 6c 6c 20      * NOTE: All 
44c0: 64 72 69 76 65 72 73 20 75 73 69 6e 67 20 74 68  drivers using th
44d0: 72 65 61 64 20 61 63 74 69 6f 6e 73 20 6e 6f 77  read actions now
44e0: 20 68 61 76 65 20 74 6f 20 70 65 72 66 6f 72 6d   have to perform
44f0: 20 74 68 65 69 72 20 54 53 44 0a 2b 20 20 20 20   their TSD.+    
4500: 20 2a 20 20 20 20 20 20 20 6d 61 6e 69 70 75 6c   *       manipul
4510: 61 74 69 6f 6e 20 6f 6e 6c 79 20 69 6e 20 74 68  ation only in th
4520: 65 69 72 20 74 68 72 65 61 64 20 61 63 74 69 6f  eir thread actio
4530: 6e 20 70 72 6f 63 2e 20 44 6f 69 6e 67 20 69 74  n proc. Doing it
4540: 20 77 68 65 6e 0a 2b 20 20 20 20 20 2a 20 20 20   when.+     *   
4550: 20 20 20 20 63 72 65 61 74 69 6e 67 20 74 68 65      creating the
4560: 69 72 20 69 6e 73 74 61 6e 63 65 20 73 74 72 75  ir instance stru
4570: 63 74 75 72 65 73 20 77 69 6c 6c 20 63 6f 6c 6c  ctures will coll
4580: 69 64 65 20 77 69 74 68 20 74 68 65 20 74 68 72  ide with the thr
4590: 65 61 64 0a 2b 20 20 20 20 20 2a 20 20 20 20 20  ead.+     *     
45a0: 20 20 61 63 74 69 6f 6e 20 61 63 74 69 76 69 74    action activit
45b0: 79 20 61 6e 64 20 6c 65 61 64 20 74 6f 20 64 61  y and lead to da
45c0: 6d 61 67 65 64 20 6c 69 73 74 73 2e 0a 20 20 20  maged lists..   
45d0: 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 73 74 61     */. .-    sta
45e0: 74 65 50 74 72 2d 3e 6e 65 78 74 43 53 50 74 72  tePtr->nextCSPtr
45f0: 09 3d 20 74 73 64 50 74 72 2d 3e 66 69 72 73 74  .= tsdPtr->first
4600: 43 53 50 74 72 3b 0a 2d 20 20 20 20 74 73 64 50  CSPtr;.-    tsdP
4610: 74 72 2d 3e 66 69 72 73 74 43 53 50 74 72 09 3d  tr->firstCSPtr.=
4620: 20 73 74 61 74 65 50 74 72 3b 0a 2d 0a 2d 20 20   statePtr;.-.-  
4630: 20 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 54 49 50    /*.-     * TIP
4640: 20 23 31 30 2e 20 4d 61 72 6b 20 74 68 65 20 63   #10. Mark the c
4650: 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 61 73  urrent thread as
4660: 20 74 68 65 20 6f 6e 65 20 6d 61 6e 61 67 69 6e   the one managin
4670: 67 20 74 68 65 20 6e 65 77 0a 2d 20 20 20 20 20  g the new.-     
4680: 2a 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e  *          chann
4690: 65 6c 2e 20 4e 6f 74 65 3a 20 27 54 63 6c 5f 47  el. Note: 'Tcl_G
46a0: 65 74 43 75 72 72 65 6e 74 54 68 72 65 61 64 27  etCurrentThread'
46b0: 20 72 65 74 75 72 6e 73 20 73 65 6e 73 69 62 6c   returns sensibl
46c0: 65 0a 2d 20 20 20 20 20 2a 20 20 20 20 20 20 20  e.-     *       
46d0: 20 20 20 76 61 6c 75 65 73 20 65 76 65 6e 20 66     values even f
46e0: 6f 72 20 61 20 6e 6f 6e 2d 74 68 72 65 61 64 65  or a non-threade
46f0: 64 20 63 6f 72 65 2e 0a 2d 20 20 20 20 20 2a 2f  d core..-     */
4700: 0a 2d 0a 2d 20 20 20 20 73 74 61 74 65 50 74 72  .-.-    statePtr
4710: 2d 3e 6d 61 6e 61 67 69 6e 67 54 68 72 65 61 64  ->managingThread
4720: 20 3d 20 54 63 6c 5f 47 65 74 43 75 72 72 65 6e   = Tcl_GetCurren
4730: 74 54 68 72 65 61 64 20 28 29 3b 0a 2b 20 20 20  tThread ();.+   
4740: 20 73 74 61 74 65 50 74 72 2d 3e 6e 65 78 74 43   statePtr->nextC
4750: 53 50 74 72 20 3d 20 28 43 68 61 6e 6e 65 6c 53  SPtr = (ChannelS
4760: 74 61 74 65 20 2a 29 20 4e 55 4c 4c 3b 0a 2b 20  tate *) NULL;.+ 
4770: 20 20 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61     Tcl_SpliceCha
4780: 6e 6e 65 6c 20 28 28 54 63 6c 5f 43 68 61 6e 6e  nnel ((Tcl_Chann
4790: 65 6c 29 20 63 68 61 6e 50 74 72 29 3b 0a 20 0a  el) chanPtr);. .
47a0: 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20       /*.      * 
47b0: 49 6e 73 74 61 6c 6c 20 74 68 69 73 20 63 68 61  Install this cha
47c0: 6e 6e 65 6c 20 69 6e 20 74 68 65 20 66 69 72 73  nnel in the firs
47d0: 74 20 65 6d 70 74 79 20 73 74 61 6e 64 61 72 64  t empty standard
47e0: 20 63 68 61 6e 6e 65 6c 20 73 6c 6f 74 2c 20 69   channel slot, i
47f0: 66 0a 40 40 20 2d 32 33 37 38 2c 37 20 2b 32 33  f.@@ -2378,7 +23
4800: 37 39 2c 37 20 40 40 0a 20 20 2a 09 52 65 73 65  79,7 @@.  *.Rese
4810: 74 73 20 74 68 65 20 66 69 65 6c 64 20 27 6e 65  ts the field 'ne
4820: 78 74 43 53 50 74 72 27 20 6f 66 20 74 68 65 20  xtCSPtr' of the 
4830: 73 70 65 63 69 66 69 65 64 20 63 68 61 6e 6e 65  specified channe
4840: 6c 20 73 74 61 74 65 20 74 6f 20 4e 55 4c 4c 2e  l state to NULL.
4850: 0a 20 20 2a 0a 20 20 2a 20 4e 4f 54 45 3a 0a 2d  .  *.  * NOTE:.-
4860: 20 2a 09 54 68 65 20 63 68 61 6e 6e 65 6c 20 74   *.The channel t
4870: 6f 20 73 70 6c 69 63 65 20 6f 75 74 20 6f 66 20  o splice out of 
4880: 74 68 65 20 6c 69 73 74 20 6d 75 73 74 20 6e 6f  the list must no
4890: 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 64 0a  t be referenced.
48a0: 2b 20 2a 09 54 68 65 20 63 68 61 6e 6e 65 6c 20  + *.The channel 
48b0: 74 6f 20 63 75 74 20 6f 75 74 20 6f 66 20 74 68  to cut out of th
48c0: 65 20 6c 69 73 74 20 6d 75 73 74 20 6e 6f 74 20  e list must not 
48d0: 62 65 20 72 65 66 65 72 65 6e 63 65 64 0a 20 20  be referenced.  
48e0: 2a 09 69 6e 20 61 6e 79 20 69 6e 74 65 72 70 72  *.in any interpr
48f0: 65 74 65 72 2e 20 54 68 69 73 20 69 73 20 73 6f  eter. This is so
4900: 6d 65 74 68 69 6e 67 20 74 68 69 73 20 70 72 6f  mething this pro
4910: 63 65 64 75 72 65 20 63 61 6e 6e 6f 74 0a 20 20  cedure cannot.  
4920: 2a 09 63 68 65 63 6b 20 28 64 65 73 70 69 74 65  *.check (despite
4930: 20 74 68 65 20 72 65 66 63 6f 75 6e 74 29 20 62   the refcount) b
4940: 65 63 61 75 73 65 20 74 68 65 20 63 61 6c 6c 65  ecause the calle
4950: 72 20 75 73 75 61 6c 6c 79 20 77 61 6e 74 73 0a  r usually wants.
4960: 20 20 2a 09 66 69 64 64 6c 65 20 77 69 74 68 20    *.fiddle with 
4970: 74 68 65 20 63 68 61 6e 6e 65 6c 20 28 6c 69 6b  the channel (lik
4980: 65 20 74 72 61 6e 73 66 65 72 69 6e 67 20 69 74  e transfering it
4990: 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 0a   to a different.
49a0: 40 40 20 2d 32 34 30 30 2c 36 20 2b 32 34 30 31  @@ -2400,6 +2401
49b0: 2c 37 20 40 40 0a 20 20 20 20 20 20 20 20 20 20  ,7 @@.          
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49e0: 2a 20 63 68 61 6e 6e 65 6c 20 6f 75 74 20 6f 66  * channel out of
49f0: 20 74 68 65 20 6c 69 73 74 20 6f 6e 20 63 6c 6f   the list on clo
4a00: 73 65 2e 20 2a 2f 0a 20 20 20 20 20 43 68 61 6e  se. */.     Chan
4a10: 6e 65 6c 53 74 61 74 65 20 2a 73 74 61 74 65 50  nelState *stateP
4a20: 74 72 20 3d 20 28 28 43 68 61 6e 6e 65 6c 20 2a  tr = ((Channel *
4a30: 29 20 63 68 61 6e 29 2d 3e 73 74 61 74 65 3b 0a  ) chan)->state;.
4a40: 20 09 09 09 09 09 2f 2a 20 73 74 61 74 65 20 6f   ...../* state o
4a50: 66 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 73 74  f the channel st
4a60: 61 63 6b 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c  ack. */.+    Tcl
4a70: 5f 44 72 69 76 65 72 54 68 72 65 61 64 41 63 74  _DriverThreadAct
4a80: 69 6f 6e 50 72 6f 63 20 2a 74 68 72 65 61 64 41  ionProc *threadA
4a90: 63 74 69 6f 6e 50 72 6f 63 3b 0a 20 0a 20 20 20  ctionProc;. .   
4aa0: 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 52 65 6d    /*.      * Rem
4ab0: 6f 76 65 20 74 68 69 73 20 63 68 61 6e 6e 65 6c  ove this channel
4ac0: 20 66 72 6f 6d 20 6f 66 20 74 68 65 20 6c 69 73   from of the lis
4ad0: 74 20 6f 66 20 61 6c 6c 20 63 68 61 6e 6e 65 6c  t of all channel
4ae0: 73 0a 40 40 20 2d 32 34 32 32 2c 37 20 2b 32 34  s.@@ -2422,7 +24
4af0: 32 34 2c 31 32 20 40 40 0a 20 0a 20 20 20 20 20  24,12 @@. .     
4b00: 73 74 61 74 65 50 74 72 2d 3e 6e 65 78 74 43 53  statePtr->nextCS
4b10: 50 74 72 20 3d 20 28 43 68 61 6e 6e 65 6c 53 74  Ptr = (ChannelSt
4b20: 61 74 65 20 2a 29 20 4e 55 4c 4c 3b 0a 20 0a 2d  ate *) NULL;. .-
4b30: 20 20 20 20 54 63 6c 70 43 75 74 46 69 6c 65 43      TclpCutFileC
4b40: 68 61 6e 6e 65 6c 28 63 68 61 6e 29 3b 0a 2b 20  hannel(chan);.+ 
4b50: 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 2c 20     /* TIP #218, 
4b60: 43 68 61 6e 6e 65 6c 20 54 68 72 65 61 64 20 41  Channel Thread A
4b70: 63 74 69 6f 6e 73 20 2a 2f 0a 2b 20 20 20 20 74  ctions */.+    t
4b80: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20  hreadActionProc 
4b90: 3d 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 68 72  = Tcl_ChannelThr
4ba0: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 28 54  eadActionProc (T
4bb0: 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 79 70  cl_GetChannelTyp
4bc0: 65 20 28 63 68 61 6e 29 29 3b 0a 2b 20 20 20 20  e (chan));.+    
4bd0: 69 66 20 28 74 68 72 65 61 64 41 63 74 69 6f 6e  if (threadAction
4be0: 50 72 6f 63 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a  Proc != NULL) {.
4bf0: 2b 20 20 20 20 20 20 20 20 28 2a 74 68 72 65 61  +        (*threa
4c00: 64 41 63 74 69 6f 6e 50 72 6f 63 29 20 28 54 63  dActionProc) (Tc
4c10: 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 49 6e 73 74  l_GetChannelInst
4c20: 61 6e 63 65 44 61 74 61 28 63 68 61 6e 29 2c 0a  anceData(chan),.
4c30: 2b 09 09 09 20 20 20 20 20 54 43 4c 5f 43 48 41  +...     TCL_CHA
4c40: 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 52 45 4d 4f  NNEL_THREAD_REMO
4c50: 56 45 29 3b 0a 2b 20 20 20 20 7d 0a 20 7d 0a 20  VE);.+    }. }. 
4c60: 0c 0a 20 2f 2a 0a 40 40 20 2d 32 34 34 31 2c 37  .. /*.@@ -2441,7
4c70: 20 2b 32 34 34 38 2c 37 20 40 40 0a 20 20 2a 09   +2448,7 @@.  *.
4c80: 4e 6f 74 68 69 6e 67 2e 0a 20 20 2a 0a 20 20 2a  Nothing..  *.  *
4c90: 20 4e 4f 54 45 3a 0a 2d 20 2a 09 54 68 65 20 63   NOTE:.- *.The c
4ca0: 68 61 6e 6e 65 6c 20 74 6f 20 61 64 64 20 74 6f  hannel to add to
4cb0: 20 74 68 65 20 6c 69 73 74 20 6d 75 73 74 20 6e   the list must n
4cc0: 6f 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 64  ot be referenced
4cd0: 20 69 6e 20 61 6e 79 0a 2b 20 2a 09 54 68 65 20   in any.+ *.The 
4ce0: 63 68 61 6e 6e 65 6c 20 74 6f 20 73 70 6c 69 63  channel to splic
4cf0: 65 20 69 6e 74 6f 20 74 68 65 20 6c 69 73 74 20  e into the list 
4d00: 6d 75 73 74 20 6e 6f 74 20 62 65 20 72 65 66 65  must not be refe
4d10: 72 65 6e 63 65 64 20 69 6e 20 61 6e 79 0a 20 20  renced in any.  
4d20: 2a 09 69 6e 74 65 72 70 72 65 74 65 72 2e 20 54  *.interpreter. T
4d30: 68 69 73 20 69 73 20 73 6f 6d 65 74 68 69 6e 67  his is something
4d40: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   this procedure 
4d50: 63 61 6e 6e 6f 74 20 63 68 65 63 6b 0a 20 20 2a  cannot check.  *
4d60: 09 28 64 65 73 70 69 74 65 20 74 68 65 20 72 65  .(despite the re
4d70: 66 63 6f 75 6e 74 29 20 62 65 63 61 75 73 65 20  fcount) because 
4d80: 74 68 65 20 63 61 6c 6c 65 72 20 75 73 75 61 6c  the caller usual
4d90: 6c 79 20 77 61 6e 74 73 20 66 69 67 67 6c 65 0a  ly wants figgle.
4da0: 20 20 2a 09 77 69 74 68 20 74 68 65 20 63 68 61    *.with the cha
4db0: 6e 6e 65 6c 20 28 6c 69 6b 65 20 74 72 61 6e 73  nnel (like trans
4dc0: 66 65 72 69 6e 67 20 69 74 20 74 6f 20 61 20 64  fering it to a d
4dd0: 69 66 66 65 72 65 6e 74 20 74 68 72 65 61 64 29  ifferent thread)
4de0: 0a 40 40 20 2d 32 34 35 39 2c 36 20 2b 32 34 36  .@@ -2459,6 +246
4df0: 36 2c 37 20 40 40 0a 20 7b 0a 20 20 20 20 20 54  6,7 @@. {.     T
4e00: 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74  hreadSpecificDat
4e10: 61 09 2a 74 73 64 50 74 72 20 3d 20 54 43 4c 5f  a.*tsdPtr = TCL_
4e20: 54 53 44 5f 49 4e 49 54 28 26 64 61 74 61 4b 65  TSD_INIT(&dataKe
4e30: 79 29 3b 0a 20 20 20 20 20 43 68 61 6e 6e 65 6c  y);.     Channel
4e40: 53 74 61 74 65 09 2a 73 74 61 74 65 50 74 72 20  State.*statePtr 
4e50: 3d 20 28 28 43 68 61 6e 6e 65 6c 20 2a 29 20 63  = ((Channel *) c
4e60: 68 61 6e 29 2d 3e 73 74 61 74 65 3b 0a 2b 20 20  han)->state;.+  
4e70: 20 20 54 63 6c 5f 44 72 69 76 65 72 54 68 72 65    Tcl_DriverThre
4e80: 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2a 74 68  adActionProc *th
4e90: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 3b 0a  readActionProc;.
4ea0: 20 0a 20 20 20 20 20 69 66 20 28 73 74 61 74 65   .     if (state
4eb0: 50 74 72 2d 3e 6e 65 78 74 43 53 50 74 72 20 21  Ptr->nextCSPtr !
4ec0: 3d 20 28 43 68 61 6e 6e 65 6c 53 74 61 74 65 20  = (ChannelState 
4ed0: 2a 29 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20  *) NULL) {.     
4ee0: 20 20 20 20 70 61 6e 69 63 28 22 54 63 6c 5f 53      panic("Tcl_S
4ef0: 70 6c 69 63 65 43 68 61 6e 6e 65 6c 3a 20 74 72  pliceChannel: tr
4f00: 79 69 6e 67 20 74 6f 20 61 64 64 20 63 68 61 6e  ying to add chan
4f10: 6e 65 6c 20 75 73 65 64 20 69 6e 20 64 69 66 66  nel used in diff
4f20: 65 72 65 6e 74 20 6c 69 73 74 22 29 3b 0a 40 40  erent list");.@@
4f30: 20 2d 32 34 37 35 2c 37 20 2b 32 34 38 33 2c 31   -2475,7 +2483,1
4f40: 32 20 40 40 0a 20 0a 20 20 20 20 20 73 74 61 74  2 @@. .     stat
4f50: 65 50 74 72 2d 3e 6d 61 6e 61 67 69 6e 67 54 68  ePtr->managingTh
4f60: 72 65 61 64 20 3d 20 54 63 6c 5f 47 65 74 43 75  read = Tcl_GetCu
4f70: 72 72 65 6e 74 54 68 72 65 61 64 20 28 29 3b 0a  rrentThread ();.
4f80: 20 0a 2d 20 20 20 20 54 63 6c 70 53 70 6c 69 63   .-    TclpSplic
4f90: 65 46 69 6c 65 43 68 61 6e 6e 65 6c 28 63 68 61  eFileChannel(cha
4fa0: 6e 29 3b 0a 2b 20 20 20 20 2f 2a 20 54 49 50 20  n);.+    /* TIP 
4fb0: 23 32 31 38 2c 20 43 68 61 6e 6e 65 6c 20 54 68  #218, Channel Th
4fc0: 72 65 61 64 20 41 63 74 69 6f 6e 73 20 2a 2f 0a  read Actions */.
4fd0: 2b 20 20 20 20 74 68 72 65 61 64 41 63 74 69 6f  +    threadActio
4fe0: 6e 50 72 6f 63 20 3d 20 54 63 6c 5f 43 68 61 6e  nProc = Tcl_Chan
4ff0: 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50  nelThreadActionP
5000: 72 6f 63 20 28 54 63 6c 5f 47 65 74 43 68 61 6e  roc (Tcl_GetChan
5010: 6e 65 6c 54 79 70 65 20 28 63 68 61 6e 29 29 3b  nelType (chan));
5020: 0a 2b 20 20 20 20 69 66 20 28 74 68 72 65 61 64  .+    if (thread
5030: 41 63 74 69 6f 6e 50 72 6f 63 20 21 3d 20 4e 55  ActionProc != NU
5040: 4c 4c 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 28  LL) {.+        (
5050: 2a 74 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f  *threadActionPro
5060: 63 29 20 28 54 63 6c 5f 47 65 74 43 68 61 6e 6e  c) (Tcl_GetChann
5070: 65 6c 49 6e 73 74 61 6e 63 65 44 61 74 61 28 63  elInstanceData(c
5080: 68 61 6e 29 2c 0a 2b 09 09 09 20 20 20 20 20 54  han),.+...     T
5090: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 48 52 45 41  CL_CHANNEL_THREA
50a0: 44 5f 49 4e 53 45 52 54 29 3b 0a 2b 20 20 20 20  D_INSERT);.+    
50b0: 7d 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d  }. }. .. /*.@@ -
50c0: 38 39 30 32 2c 36 20 2b 38 39 31 35 2c 38 20 40  8902,6 +8915,8 @
50d0: 40 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 43  @. .return TCL_C
50e0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 32  HANNEL_VERSION_2
50f0: 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66  ;.     } else if
5100: 20 28 63 68 61 6e 54 79 70 65 50 74 72 2d 3e 76   (chanTypePtr->v
5110: 65 72 73 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48  ersion == TCL_CH
5120: 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 29  ANNEL_VERSION_3)
5130: 20 7b 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f   {. .return TCL_
5140: 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f  CHANNEL_VERSION_
5150: 33 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69  3;.+    } else i
5160: 66 20 28 63 68 61 6e 54 79 70 65 50 74 72 2d 3e  f (chanTypePtr->
5170: 76 65 72 73 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43  version == TCL_C
5180: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34  HANNEL_VERSION_4
5190: 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c  ) {.+.return TCL
51a0: 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e  _CHANNEL_VERSION
51b0: 5f 34 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20  _4;.     } else 
51c0: 7b 0a 20 09 2f 2a 0a 20 09 20 2a 20 49 6e 20 3c  {. ./*. . * In <
51d0: 76 32 20 63 68 61 6e 6e 65 6c 20 76 65 72 73 69  v2 channel versi
51e0: 6f 6e 73 2c 20 74 68 65 20 76 65 72 73 69 6f 6e  ons, the version
51f0: 20 66 69 65 6c 64 20 69 73 20 6f 63 63 75 70 69   field is occupi
5200: 65 64 0a 40 40 20 2d 39 32 35 35 2c 36 20 2b 39  ed.@@ -9255,6 +9
5210: 32 37 30 2c 33 33 20 40 40 0a 20 20 20 20 20 7d  270,33 @@.     }
5220: 0a 20 7d 0a 20 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d  . }. .+/*.+ *---
5230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5270: 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 54 63 6c 5f  ---.+ *.+ * Tcl_
5280: 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74  ChannelThreadAct
5290: 69 6f 6e 50 72 6f 63 20 2d 2d 0a 2b 20 2a 0a 2b  ionProc --.+ *.+
52a0: 20 2a 09 52 65 74 75 72 6e 20 74 68 65 20 54 63   *.Return the Tc
52b0: 6c 5f 44 72 69 76 65 72 54 68 72 65 61 64 41 63  l_DriverThreadAc
52c0: 74 69 6f 6e 50 72 6f 63 20 6f 66 20 74 68 65 20  tionProc of the 
52d0: 63 68 61 6e 6e 65 6c 20 74 79 70 65 2e 0a 2b 20  channel type..+ 
52e0: 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b  *.+ * Results:.+
52f0: 20 2a 09 41 20 70 6f 69 6e 74 65 72 20 74 6f 20   *.A pointer to 
5300: 74 68 65 20 70 72 6f 63 2e 0a 2b 20 2a 0a 2b 20  the proc..+ *.+ 
5310: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
5320: 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20  + *.None..+ *.+ 
5330: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
5340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5370: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b  -------.+ */.+.+
5380: 54 63 6c 5f 44 72 69 76 65 72 54 68 72 65 61 64  Tcl_DriverThread
5390: 41 63 74 69 6f 6e 50 72 6f 63 20 2a 0a 2b 54 63  ActionProc *.+Tc
53a0: 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41  l_ChannelThreadA
53b0: 63 74 69 6f 6e 50 72 6f 63 28 63 68 61 6e 54 79  ctionProc(chanTy
53c0: 70 65 50 74 72 29 0a 2b 20 20 20 20 54 63 6c 5f  pePtr).+    Tcl_
53d0: 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a 63 68 61  ChannelType *cha
53e0: 6e 54 79 70 65 50 74 72 3b 09 2f 2a 20 50 6f 69  nTypePtr;./* Poi
53f0: 6e 74 65 72 20 74 6f 20 63 68 61 6e 6e 65 6c 20  nter to channel 
5400: 74 79 70 65 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20 20  type. */.+{.+   
5410: 20 69 66 20 28 48 61 76 65 56 65 72 73 69 6f 6e   if (HaveVersion
5420: 28 63 68 61 6e 54 79 70 65 50 74 72 2c 20 54 43  (chanTypePtr, TC
5430: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f  L_CHANNEL_VERSIO
5440: 4e 5f 34 29 29 20 7b 0a 2b 09 72 65 74 75 72 6e  N_4)) {.+.return
5450: 20 63 68 61 6e 54 79 70 65 50 74 72 2d 3e 74 68   chanTypePtr->th
5460: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 3b 0a  readActionProc;.
5470: 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09  +    } else {.+.
5480: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 2b 20 20  return NULL;.+  
5490: 20 20 7d 0a 2b 7d 0a 2b 0a 20 23 69 66 20 30 0a    }.+}.+. #if 0.
54a0: 20 2f 2a 20 46 6f 72 20 66 75 74 75 72 65 20 64   /* For future d
54b0: 65 62 75 67 67 69 6e 67 20 77 6f 72 6b 2c 20 61  ebugging work, a
54c0: 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
54d0: 20 74 6f 20 70 72 69 6e 74 20 74 68 65 20 66 6c   to print the fl
54e0: 61 67 73 20 6f 66 0a 20 20 2a 20 61 20 63 68 61  ags of.  * a cha
54f0: 6e 6e 65 6c 20 69 6e 20 73 65 6d 69 2d 72 65 61  nnel in semi-rea
5500: 64 61 62 6c 65 20 66 6f 72 6d 2e 0a 49 6e 64 65  dable form..Inde
5510: 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e  x: generic/tclIn
5520: 74 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  t.h.============
5530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5540: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5550: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5560: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65  =======.RCS file
5570: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74  : /cvsroot/tcl/t
5580: 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e  cl/generic/tclIn
5590: 74 2e 68 2c 76 0a 72 65 74 72 69 65 76 69 6e 67  t.h,v.retrieving
55a0: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 31 38 2e   revision 1.118.
55b0: 32 2e 37 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d  2.7.diff -w -u -
55c0: 72 31 2e 31 31 38 2e 32 2e 37 20 74 63 6c 49 6e  r1.118.2.7 tclIn
55d0: 74 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f  t.h.--- generic/
55e0: 74 63 6c 49 6e 74 2e 68 09 32 31 20 4a 75 6c 20  tclInt.h.21 Jul 
55f0: 32 30 30 34 20 30 31 3a 33 30 3a 35 37 20 2d 30  2004 01:30:57 -0
5600: 30 30 30 09 31 2e 31 31 38 2e 32 2e 37 0a 2b 2b  000.1.118.2.7.++
5610: 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74  + generic/tclInt
5620: 2e 68 09 32 37 20 4a 61 6e 20 32 30 30 35 20 32  .h.27 Jan 2005 2
5630: 32 3a 34 39 3a 31 38 20 2d 30 30 30 30 0a 40 40  2:49:18 -0000.@@
5640: 20 2d 31 37 34 39 2c 38 20 2b 31 37 34 39 2c 36   -1749,8 +1749,6
5650: 20 40 40 0a 20 45 58 54 45 52 4e 20 54 63 6c 5f   @@. EXTERN Tcl_
5660: 43 68 61 6e 6e 65 6c 09 54 63 6c 70 4f 70 65 6e  Channel.TclpOpen
5670: 46 69 6c 65 43 68 61 6e 6e 65 6c 20 5f 41 4e 53  FileChannel _ANS
5680: 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 49 6e 74  I_ARGS_((Tcl_Int
5690: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 09 09  erp *interp,. ..
56a0: 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 61  .    Tcl_Obj *pa
56b0: 74 68 50 74 72 2c 20 69 6e 74 20 6d 6f 64 65 2c  thPtr, int mode,
56c0: 0a 20 09 09 09 20 20 20 20 69 6e 74 20 70 65 72  . ...    int per
56d0: 6d 69 73 73 69 6f 6e 73 29 29 3b 0a 2d 45 58 54  missions));.-EXT
56e0: 45 52 4e 20 76 6f 69 64 09 09 54 63 6c 70 43 75  ERN void..TclpCu
56f0: 74 46 69 6c 65 43 68 61 6e 6e 65 6c 20 5f 41 4e  tFileChannel _AN
5700: 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 43 68  SI_ARGS_((Tcl_Ch
5710: 61 6e 6e 65 6c 20 63 68 61 6e 29 29 3b 0a 2d 45  annel chan));.-E
5720: 58 54 45 52 4e 20 76 6f 69 64 09 09 54 63 6c 70  XTERN void..Tclp
5730: 53 70 6c 69 63 65 46 69 6c 65 43 68 61 6e 6e 65  SpliceFileChanne
5740: 6c 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54  l _ANSI_ARGS_((T
5750: 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e 29  cl_Channel chan)
5760: 29 3b 0a 20 45 58 54 45 52 4e 20 76 6f 69 64 09  );. EXTERN void.
5770: 09 54 63 6c 70 50 61 6e 69 63 20 5f 41 4e 53 49  .TclpPanic _ANSI
5780: 5f 41 52 47 53 5f 28 54 43 4c 5f 56 41 52 41 52  _ARGS_(TCL_VARAR
5790: 47 53 28 43 4f 4e 53 54 20 63 68 61 72 20 2a 2c  GS(CONST char *,
57a0: 0a 20 09 09 09 20 20 20 20 66 6f 72 6d 61 74 29  . ...    format)
57b0: 29 3b 0a 20 45 58 54 45 52 4e 20 63 68 61 72 20  );. EXTERN char 
57c0: 2a 09 09 54 63 6c 70 52 65 61 64 6c 69 6e 6b 20  *..TclpReadlink 
57d0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 4f 4e  _ANSI_ARGS_((CON
57e0: 53 54 20 63 68 61 72 20 2a 66 69 6c 65 4e 61 6d  ST char *fileNam
57f0: 65 2c 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69  e,.Index: generi
5800: 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 0a  c/tclStubInit.c.
5810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5830: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5840: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5850: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63  ===.RCS file: /c
5860: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67  vsroot/tcl/tcl/g
5870: 65 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49 6e  eneric/tclStubIn
5880: 69 74 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e  it.c,v.retrievin
5890: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 37 39 2e  g revision 1.79.
58a0: 32 2e 38 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d  2.8.diff -w -u -
58b0: 72 31 2e 37 39 2e 32 2e 38 20 74 63 6c 53 74 75  r1.79.2.8 tclStu
58c0: 62 49 6e 69 74 2e 63 0a 2d 2d 2d 20 67 65 6e 65  bInit.c.--- gene
58d0: 72 69 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e  ric/tclStubInit.
58e0: 63 09 31 34 20 4f 63 74 20 32 30 30 34 20 31 35  c.14 Oct 2004 15
58f0: 3a 33 30 3a 35 32 20 2d 30 30 30 30 09 31 2e 37  :30:52 -0000.1.7
5900: 39 2e 32 2e 38 0a 2b 2b 2b 20 67 65 6e 65 72 69  9.2.8.+++ generi
5910: 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 09  c/tclStubInit.c.
5920: 32 37 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34  27 Jan 2005 22:4
5930: 39 3a 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 39  9:19 -0000.@@ -9
5940: 35 33 2c 36 20 2b 39 35 33 2c 36 37 20 40 40 0a  53,6 +953,67 @@.
5950: 20 20 20 20 20 54 63 6c 5f 53 65 65 6b 2c 20 2f       Tcl_Seek, /
5960: 2a 20 34 39 31 20 2a 2f 0a 20 20 20 20 20 54 63  * 491 */.     Tc
5970: 6c 5f 54 65 6c 6c 2c 20 2f 2a 20 34 39 32 20 2a  l_Tell, /* 492 *
5980: 2f 0a 20 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e  /.     Tcl_Chann
5990: 65 6c 57 69 64 65 53 65 65 6b 50 72 6f 63 2c 20  elWideSeekProc, 
59a0: 2f 2a 20 34 39 33 20 2a 2f 0a 2b 20 20 20 20 4e  /* 493 */.+    N
59b0: 55 4c 4c 2c 20 2f 2a 20 34 39 34 20 2a 2f 0a 2b  ULL, /* 494 */.+
59c0: 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 34 39 35      NULL, /* 495
59d0: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f   */.+    NULL, /
59e0: 2a 20 34 39 36 20 2a 2f 0a 2b 20 20 20 20 4e 55  * 496 */.+    NU
59f0: 4c 4c 2c 20 2f 2a 20 34 39 37 20 2a 2f 0a 2b 20  LL, /* 497 */.+ 
5a00: 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 34 39 38 20     NULL, /* 498 
5a10: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a  */.+    NULL, /*
5a20: 20 34 39 39 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c   499 */.+    NUL
5a30: 4c 2c 20 2f 2a 20 35 30 30 20 2a 2f 0a 2b 20 20  L, /* 500 */.+  
5a40: 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 30 31 20 2a    NULL, /* 501 *
5a50: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20  /.+    NULL, /* 
5a60: 35 30 32 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c  502 */.+    NULL
5a70: 2c 20 2f 2a 20 35 30 33 20 2a 2f 0a 2b 20 20 20  , /* 503 */.+   
5a80: 20 4e 55 4c 4c 2c 20 2f 2a 20 35 30 34 20 2a 2f   NULL, /* 504 */
5a90: 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35  .+    NULL, /* 5
5aa0: 30 35 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c  05 */.+    NULL,
5ab0: 20 2f 2a 20 35 30 36 20 2a 2f 0a 2b 20 20 20 20   /* 506 */.+    
5ac0: 4e 55 4c 4c 2c 20 2f 2a 20 35 30 37 20 2a 2f 0a  NULL, /* 507 */.
5ad0: 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 30  +    NULL, /* 50
5ae0: 38 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20  8 */.+    NULL, 
5af0: 2f 2a 20 35 30 39 20 2a 2f 0a 2b 20 20 20 20 4e  /* 509 */.+    N
5b00: 55 4c 4c 2c 20 2f 2a 20 35 31 30 20 2a 2f 0a 2b  ULL, /* 510 */.+
5b10: 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 31 31      NULL, /* 511
5b20: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f   */.+    NULL, /
5b30: 2a 20 35 31 32 20 2a 2f 0a 2b 20 20 20 20 4e 55  * 512 */.+    NU
5b40: 4c 4c 2c 20 2f 2a 20 35 31 33 20 2a 2f 0a 2b 20  LL, /* 513 */.+ 
5b50: 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 31 34 20     NULL, /* 514 
5b60: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a  */.+    NULL, /*
5b70: 20 35 31 35 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c   515 */.+    NUL
5b80: 4c 2c 20 2f 2a 20 35 31 36 20 2a 2f 0a 2b 20 20  L, /* 516 */.+  
5b90: 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 31 37 20 2a    NULL, /* 517 *
5ba0: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20  /.+    NULL, /* 
5bb0: 35 31 38 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c  518 */.+    NULL
5bc0: 2c 20 2f 2a 20 35 31 39 20 2a 2f 0a 2b 20 20 20  , /* 519 */.+   
5bd0: 20 4e 55 4c 4c 2c 20 2f 2a 20 35 32 30 20 2a 2f   NULL, /* 520 */
5be0: 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35  .+    NULL, /* 5
5bf0: 32 31 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c  21 */.+    NULL,
5c00: 20 2f 2a 20 35 32 32 20 2a 2f 0a 2b 20 20 20 20   /* 522 */.+    
5c10: 4e 55 4c 4c 2c 20 2f 2a 20 35 32 33 20 2a 2f 0a  NULL, /* 523 */.
5c20: 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 32  +    NULL, /* 52
5c30: 34 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20  4 */.+    NULL, 
5c40: 2f 2a 20 35 32 35 20 2a 2f 0a 2b 20 20 20 20 4e  /* 525 */.+    N
5c50: 55 4c 4c 2c 20 2f 2a 20 35 32 36 20 2a 2f 0a 2b  ULL, /* 526 */.+
5c60: 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 32 37      NULL, /* 527
5c70: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f   */.+    NULL, /
5c80: 2a 20 35 32 38 20 2a 2f 0a 2b 20 20 20 20 4e 55  * 528 */.+    NU
5c90: 4c 4c 2c 20 2f 2a 20 35 32 39 20 2a 2f 0a 2b 20  LL, /* 529 */.+ 
5ca0: 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 33 30 20     NULL, /* 530 
5cb0: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a  */.+    NULL, /*
5cc0: 20 35 33 31 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c   531 */.+    NUL
5cd0: 4c 2c 20 2f 2a 20 35 33 32 20 2a 2f 0a 2b 20 20  L, /* 532 */.+  
5ce0: 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 33 33 20 2a    NULL, /* 533 *
5cf0: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20  /.+    NULL, /* 
5d00: 35 33 34 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c  534 */.+    NULL
5d10: 2c 20 2f 2a 20 35 33 35 20 2a 2f 0a 2b 20 20 20  , /* 535 */.+   
5d20: 20 4e 55 4c 4c 2c 20 2f 2a 20 35 33 36 20 2a 2f   NULL, /* 536 */
5d30: 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35  .+    NULL, /* 5
5d40: 33 37 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c  37 */.+    NULL,
5d50: 20 2f 2a 20 35 33 38 20 2a 2f 0a 2b 20 20 20 20   /* 538 */.+    
5d60: 4e 55 4c 4c 2c 20 2f 2a 20 35 33 39 20 2a 2f 0a  NULL, /* 539 */.
5d70: 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 34  +    NULL, /* 54
5d80: 30 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20  0 */.+    NULL, 
5d90: 2f 2a 20 35 34 31 20 2a 2f 0a 2b 20 20 20 20 4e  /* 541 */.+    N
5da0: 55 4c 4c 2c 20 2f 2a 20 35 34 32 20 2a 2f 0a 2b  ULL, /* 542 */.+
5db0: 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 34 33      NULL, /* 543
5dc0: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f   */.+    NULL, /
5dd0: 2a 20 35 34 34 20 2a 2f 0a 2b 20 20 20 20 4e 55  * 544 */.+    NU
5de0: 4c 4c 2c 20 2f 2a 20 35 34 35 20 2a 2f 0a 2b 20  LL, /* 545 */.+ 
5df0: 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 34 36 20     NULL, /* 546 
5e00: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a  */.+    NULL, /*
5e10: 20 35 34 37 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c   547 */.+    NUL
5e20: 4c 2c 20 2f 2a 20 35 34 38 20 2a 2f 0a 2b 20 20  L, /* 548 */.+  
5e30: 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 34 39 20 2a    NULL, /* 549 *
5e40: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20  /.+    NULL, /* 
5e50: 35 35 30 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c  550 */.+    NULL
5e60: 2c 20 2f 2a 20 35 35 31 20 2a 2f 0a 2b 20 20 20  , /* 551 */.+   
5e70: 20 4e 55 4c 4c 2c 20 2f 2a 20 35 35 32 20 2a 2f   NULL, /* 552 */
5e80: 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35  .+    NULL, /* 5
5e90: 35 33 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 43  53 */.+    Tcl_C
5ea0: 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69  hannelThreadActi
5eb0: 6f 6e 50 72 6f 63 2c 20 2f 2a 20 35 35 34 20 2a  onProc, /* 554 *
5ec0: 2f 0a 20 7d 3b 0a 20 0a 20 2f 2a 20 21 45 4e 44  /. };. . /* !END
5ed0: 21 3a 20 44 6f 20 6e 6f 74 20 65 64 69 74 20 61  !: Do not edit a
5ee0: 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 2e 20  bove this line. 
5ef0: 2a 2f 0a 49 6e 64 65 78 3a 20 6d 61 63 2f 74 63  */.Index: mac/tc
5f00: 6c 4d 61 63 43 68 61 6e 2e 63 0a 3d 3d 3d 3d 3d  lMacChan.c.=====
5f10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5f20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5f30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5f40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52  ==============.R
5f50: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f  CS file: /cvsroo
5f60: 74 2f 74 63 6c 2f 74 63 6c 2f 6d 61 63 2f 41 74  t/tcl/tcl/mac/At
5f70: 74 69 63 2f 74 63 6c 4d 61 63 43 68 61 6e 2e 63  tic/tclMacChan.c
5f80: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65  ,v.retrieving re
5f90: 76 69 73 69 6f 6e 20 31 2e 32 31 0a 64 69 66 66  vision 1.21.diff
5fa0: 20 2d 77 20 2d 75 20 2d 72 31 2e 32 31 20 74 63   -w -u -r1.21 tc
5fb0: 6c 4d 61 63 43 68 61 6e 2e 63 0a 2d 2d 2d 20 6d  lMacChan.c.--- m
5fc0: 61 63 2f 74 63 6c 4d 61 63 43 68 61 6e 2e 63 09  ac/tclMacChan.c.
5fd0: 33 20 4d 61 72 20 32 30 30 33 20 32 30 3a 32 32  3 Mar 2003 20:22
5fe0: 3a 34 32 20 2d 30 30 30 30 09 31 2e 32 31 0a 2b  :42 -0000.1.21.+
5ff0: 2b 2b 20 6d 61 63 2f 74 63 6c 4d 61 63 43 68 61  ++ mac/tclMacCha
6000: 6e 2e 63 09 32 37 20 4a 61 6e 20 32 30 30 35 20  n.c.27 Jan 2005 
6010: 32 32 3a 34 39 3a 31 39 20 2d 30 30 30 30 0a 40  22:49:19 -0000.@
6020: 40 20 2d 31 30 32 2c 36 20 2b 31 30 32 2c 38 20  @ -102,6 +102,8 
6030: 40 40 0a 20 09 09 09 20 20 20 20 6c 6f 6e 67 20  @@. ...    long 
6040: 6f 66 66 73 65 74 2c 20 69 6e 74 20 6d 6f 64 65  offset, int mode
6050: 2c 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65  , int *errorCode
6060: 29 29 3b 0a 20 73 74 61 74 69 63 20 76 6f 69 64  ));. static void
6070: 09 09 46 69 6c 65 53 65 74 75 70 50 72 6f 63 20  ..FileSetupProc 
6080: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69  _ANSI_ARGS_((Cli
6090: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
60a0: 74 61 2c 0a 20 09 09 09 20 20 20 20 69 6e 74 20  ta,. ...    int 
60b0: 66 6c 61 67 73 29 29 3b 0a 2b 73 74 61 74 69 63  flags));.+static
60c0: 20 76 6f 69 64 20 20 20 20 20 20 20 20 20 20 20   void           
60d0: 20 20 46 69 6c 65 54 68 72 65 61 64 41 63 74 69    FileThreadActi
60e0: 6f 6e 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47  onProc _ANSI_ARG
60f0: 53 5f 20 28 28 0a 2b 09 09 09 20 20 20 43 6c 69  S_ ((.+...   Cli
6100: 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65  entData instance
6110: 44 61 74 61 2c 20 69 6e 74 20 61 63 74 69 6f 6e  Data, int action
6120: 29 29 3b 0a 20 73 74 61 74 69 63 20 54 63 6c 5f  ));. static Tcl_
6130: 43 68 61 6e 6e 65 6c 09 4f 70 65 6e 46 69 6c 65  Channel.OpenFile
6140: 43 68 61 6e 6e 65 6c 20 5f 41 4e 53 49 5f 41 52  Channel _ANSI_AR
6150: 47 53 5f 28 28 43 4f 4e 53 54 20 63 68 61 72 20  GS_((CONST char 
6160: 2a 66 69 6c 65 4e 61 6d 65 2c 20 0a 20 09 09 09  *fileName, . ...
6170: 20 20 20 20 69 6e 74 20 6d 6f 64 65 2c 20 69 6e      int mode, in
6180: 74 20 70 65 72 6d 69 73 73 69 6f 6e 73 2c 20 69  t permissions, i
6190: 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 50 74 72  nt *errorCodePtr
61a0: 29 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09  ));. static int.
61b0: 09 53 74 64 49 4f 42 6c 6f 63 6b 4d 6f 64 65 20  .StdIOBlockMode 
61c0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69  _ANSI_ARGS_((Cli
61d0: 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65  entData instance
61e0: 44 61 74 61 2c 0a 40 40 20 2d 31 32 33 2c 37 20  Data,.@@ -123,7 
61f0: 2b 31 32 35 2c 37 20 40 40 0a 20 0a 20 73 74 61  +125,7 @@. . sta
6200: 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54  tic Tcl_ChannelT
6210: 79 70 65 20 63 6f 6e 73 6f 6c 65 43 68 61 6e 6e  ype consoleChann
6220: 65 6c 54 79 70 65 20 3d 20 7b 0a 20 20 20 20 20  elType = {.     
6230: 22 66 69 6c 65 22 2c 09 09 09 2f 2a 20 54 79 70  "file",.../* Typ
6240: 65 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20  e name. */.-    
6250: 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65  (Tcl_ChannelType
6260: 56 65 72 73 69 6f 6e 29 53 74 64 49 4f 42 6c 6f  Version)StdIOBlo
6270: 63 6b 4d 6f 64 65 2c 09 09 2f 2a 20 53 65 74 20  ckMode,../* Set 
6280: 62 6c 6f 63 6b 69 6e 67 2f 6e 6f 6e 62 6c 6f 63  blocking/nonbloc
6290: 6b 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a 2b 20 20  king mode.*/.+  
62a0: 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45    TCL_CHANNEL_VE
62b0: 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 63  RSION_4,./* v4 c
62c0: 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 53  hannel */.     S
62d0: 74 64 49 4f 43 6c 6f 73 65 2c 09 09 09 2f 2a 20  tdIOClose,.../* 
62e0: 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a 20  Close proc. */. 
62f0: 20 20 20 20 53 74 64 49 4f 49 6e 70 75 74 2c 09      StdIOInput,.
6300: 09 09 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e  ../* Input proc.
6310: 20 2a 2f 0a 20 20 20 20 20 53 74 64 49 4f 4f 75   */.     StdIOOu
6320: 74 70 75 74 2c 09 09 2f 2a 20 4f 75 74 70 75 74  tput,../* Output
6330: 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d 31 33   proc. */.@@ -13
6340: 32 2c 36 20 2b 31 33 34 2c 31 32 20 40 40 0a 20  2,6 +134,12 @@. 
6350: 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 47      NULL,.../* G
6360: 65 74 20 6f 70 74 69 6f 6e 20 70 72 6f 63 2e 20  et option proc. 
6370: 2a 2f 0a 20 20 20 20 20 43 6f 6d 6d 6f 6e 57 61  */.     CommonWa
6380: 74 63 68 2c 09 09 2f 2a 20 49 6e 69 74 69 61 6c  tch,../* Initial
6390: 69 7a 65 20 6e 6f 74 69 66 69 65 72 2e 20 2a 2f  ize notifier. */
63a0: 0a 20 20 20 20 20 43 6f 6d 6d 6f 6e 47 65 74 48  .     CommonGetH
63b0: 61 6e 64 6c 65 09 09 2f 2a 20 47 65 74 20 4f 53  andle../* Get OS
63c0: 20 68 61 6e 64 6c 65 73 20 6f 75 74 20 6f 66 20   handles out of 
63d0: 63 68 61 6e 6e 65 6c 2e 20 2a 2f 0a 2b 20 20 20  channel. */.+   
63e0: 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 63 6c 6f 73   NULL,.../* clos
63f0: 65 32 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20  e2proc. */.+    
6400: 53 74 64 49 4f 42 6c 6f 63 6b 4d 6f 64 65 2c 09  StdIOBlockMode,.
6410: 09 2f 2a 20 53 65 74 20 62 6c 6f 63 6b 69 6e 67  ./* Set blocking
6420: 2f 6e 6f 6e 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64  /nonblocking mod
6430: 65 2e 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09  e.*/.+    NULL,.
6440: 09 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e  ../* flush proc.
6450: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09   */.+    NULL,..
6460: 09 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63  ./* handler proc
6470: 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09  . */.+    NULL,.
6480: 09 09 2f 2a 20 77 69 64 65 20 73 65 65 6b 20 70  ../* wide seek p
6490: 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c  roc. */.+    NUL
64a0: 4c 2c 09 09 20 20 20 20 20 20 20 20 2f 2a 20 74  L,..        /* t
64b0: 68 72 65 61 64 20 61 63 74 69 6f 6e 73 20 2a 2f  hread actions */
64c0: 0a 20 7d 3b 0a 20 0a 20 2f 2a 0a 40 40 20 2d 31  . };. . /*.@@ -1
64d0: 34 30 2c 38 20 2b 31 34 38 2c 37 20 40 40 0a 20  40,8 +148,7 @@. 
64e0: 0a 20 73 74 61 74 69 63 20 54 63 6c 5f 43 68 61  . static Tcl_Cha
64f0: 6e 6e 65 6c 54 79 70 65 20 66 69 6c 65 43 68 61  nnelType fileCha
6500: 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a 20 20 20  nnelType = {.   
6510: 20 20 22 66 69 6c 65 22 2c 09 09 09 2f 2a 20 54    "file",.../* T
6520: 79 70 65 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20  ype name. */.-  
6530: 20 20 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79    (Tcl_ChannelTy
6540: 70 65 56 65 72 73 69 6f 6e 29 46 69 6c 65 42 6c  peVersion)FileBl
6550: 6f 63 6b 4d 6f 64 65 2c 09 09 2f 2a 20 53 65 74  ockMode,../* Set
6560: 20 62 6c 6f 63 6b 69 6e 67 20 6f 72 0a 2d 20 20   blocking or.-  
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
6590: 20 6e 6f 6e 2d 62 6c 6f 63 6b 69 6e 67 20 6d 6f   non-blocking mo
65a0: 64 65 2e 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43  de.*/.+    TCL_C
65b0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34  HANNEL_VERSION_4
65c0: 2c 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20  ,./* v4 channel 
65d0: 2a 2f 0a 20 20 20 20 20 46 69 6c 65 43 6c 6f 73  */.     FileClos
65e0: 65 2c 09 09 09 2f 2a 20 43 6c 6f 73 65 20 70 72  e,.../* Close pr
65f0: 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 46 69 6c 65  oc. */.     File
6600: 49 6e 70 75 74 2c 09 09 09 2f 2a 20 49 6e 70 75  Input,.../* Inpu
6610: 74 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20  t proc. */.     
6620: 46 69 6c 65 4f 75 74 70 75 74 2c 09 09 09 2f 2a  FileOutput,.../*
6630: 20 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f   Output proc. */
6640: 0a 40 40 20 2d 31 35 30 2c 36 20 2b 31 35 37 2c  .@@ -150,6 +157,
6650: 31 32 20 40 40 0a 20 20 20 20 20 4e 55 4c 4c 2c  12 @@.     NULL,
6660: 09 09 09 2f 2a 20 47 65 74 20 6f 70 74 69 6f 6e  .../* Get option
6670: 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 43   proc. */.     C
6680: 6f 6d 6d 6f 6e 57 61 74 63 68 2c 09 09 2f 2a 20  ommonWatch,../* 
6690: 49 6e 69 74 69 61 6c 69 7a 65 20 6e 6f 74 69 66  Initialize notif
66a0: 69 65 72 2e 20 2a 2f 0a 20 20 20 20 20 43 6f 6d  ier. */.     Com
66b0: 6d 6f 6e 47 65 74 48 61 6e 64 6c 65 09 09 2f 2a  monGetHandle../*
66c0: 20 47 65 74 20 4f 53 20 68 61 6e 64 6c 65 73 20   Get OS handles 
66d0: 6f 75 74 20 6f 66 20 63 68 61 6e 6e 65 6c 2e 20  out of channel. 
66e0: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 09  */.+    NULL,...
66f0: 2f 2a 20 63 6c 6f 73 65 32 70 72 6f 63 2e 20 2a  /* close2proc. *
6700: 2f 0a 2b 20 20 20 20 46 69 6c 65 42 6c 6f 63 6b  /.+    FileBlock
6710: 4d 6f 64 65 2c 09 09 2f 2a 20 53 65 74 20 62 6c  Mode,../* Set bl
6720: 6f 63 6b 69 6e 67 2f 6e 6f 6e 62 6c 6f 63 6b 69  ocking/nonblocki
6730: 6e 67 20 6d 6f 64 65 2e 2a 2f 0a 2b 20 20 20 20  ng mode.*/.+    
6740: 4e 55 4c 4c 2c 09 09 09 2f 2a 20 66 6c 75 73 68  NULL,.../* flush
6750: 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e   proc. */.+    N
6760: 55 4c 4c 2c 09 09 09 2f 2a 20 68 61 6e 64 6c 65  ULL,.../* handle
6770: 72 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20  r proc. */.+    
6780: 4e 55 4c 4c 2c 09 09 09 2f 2a 20 77 69 64 65 20  NULL,.../* wide 
6790: 73 65 65 6b 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20  seek proc. */.+ 
67a0: 20 20 20 46 69 6c 65 54 68 72 65 61 64 41 63 74     FileThreadAct
67b0: 69 6f 6e 50 72 6f 63 2c 20 20 20 20 20 20 20 2f  ionProc,       /
67c0: 2a 20 74 68 72 65 61 64 20 61 63 74 69 6f 6e 73  * thread actions
67d0: 20 2a 2f 0a 20 7d 3b 0a 20 0a 20 0a 40 40 20 2d   */. };. . .@@ -
67e0: 31 32 31 32 2c 31 30 20 2b 31 32 32 35 2c 39 20  1212,10 +1225,9 
67f0: 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d  @@. /*.  *------
6800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6840: 0a 20 20 2a 0a 2d 20 2a 20 54 63 6c 70 43 75 74  .  *.- * TclpCut
6850: 46 69 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2b  FileChannel --.+
6860: 20 2a 20 46 69 6c 65 54 68 72 65 61 64 41 63 74   * FileThreadAct
6870: 69 6f 6e 50 72 6f 63 20 2d 2d 0a 20 20 2a 0a 2d  ionProc --.  *.-
6880: 20 2a 09 52 65 6d 6f 76 65 20 61 6e 79 20 74 68   *.Remove any th
6890: 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 73 20  read local refs 
68a0: 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e  to this channel.
68b0: 20 53 65 65 0a 2d 20 2a 09 54 63 6c 5f 43 75 74   See.- *.Tcl_Cut
68c0: 43 68 61 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65  Channel for more
68d0: 20 69 6e 66 6f 2e 0a 2b 20 2a 09 49 6e 73 65 72   info..+ *.Inser
68e0: 74 20 6f 72 20 72 65 6d 6f 76 65 20 61 6e 79 20  t or remove any 
68f0: 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66  thread local ref
6900: 73 20 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65  s to this channe
6910: 6c 2e 0a 20 20 2a 0a 20 20 2a 20 52 65 73 75 6c  l..  *.  * Resul
6920: 74 73 3a 0a 20 20 2a 09 4e 6f 6e 65 2e 0a 40 40  ts:.  *.None..@@
6930: 20 2d 31 32 32 36 2c 32 33 20 2b 31 32 33 38 2c   -1226,23 +1238,
6940: 32 31 20 40 40 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d  21 @@.  *-------
6950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
6990: 20 20 2a 2f 0a 20 0a 2d 76 6f 69 64 0a 2d 54 63    */. .-void.-Tc
69a0: 6c 70 43 75 74 46 69 6c 65 43 68 61 6e 6e 65 6c  lpCutFileChannel
69b0: 28 63 68 61 6e 29 0a 2d 20 20 20 20 54 63 6c 5f  (chan).-    Tcl_
69c0: 43 68 61 6e 6e 65 6c 20 63 68 61 6e 3b 09 09 09  Channel chan;...
69d0: 2f 2a 20 54 68 65 20 63 68 61 6e 6e 65 6c 20 62  /* The channel b
69e0: 65 69 6e 67 20 72 65 6d 6f 76 65 64 2e 20 4d 75  eing removed. Mu
69f0: 73 74 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20  st.-            
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 6e               * n
6a20: 6f 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 64  ot be referenced
6a30: 20 69 6e 20 61 6e 79 0a 2d 20 20 20 20 20 20 20   in any.-       
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a60: 20 20 2a 20 69 6e 74 65 72 70 72 65 74 65 72 2e    * interpreter.
6a70: 20 2a 2f 0a 2b 73 74 61 74 69 63 20 76 6f 69 64   */.+static void
6a80: 0a 2b 46 69 6c 65 54 68 72 65 61 64 41 63 74 69  .+FileThreadActi
6a90: 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 6e 63 65  onProc (instance
6aa0: 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 0a 2b 20  Data, action).+ 
6ab0: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69      ClientData i
6ac0: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20  nstanceData;.+  
6ad0: 20 20 20 69 6e 74 20 61 63 74 69 6f 6e 3b 0a 20     int action;. 
6ae0: 7b 0a 20 20 20 20 20 54 68 72 65 61 64 53 70 65  {.     ThreadSpe
6af0: 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 50 74  cificData *tsdPt
6b00: 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54  r = TCL_TSD_INIT
6b10: 28 26 64 61 74 61 4b 65 79 29 3b 0a 2d 20 20 20  (&dataKey);.-   
6b20: 20 43 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50 74   Channel *chanPt
6b30: 72 20 3d 20 28 43 68 61 6e 6e 65 6c 20 2a 29 20  r = (Channel *) 
6b40: 63 68 61 6e 3b 0a 2d 20 20 20 20 46 69 6c 65 53  chan;.-    FileS
6b50: 74 61 74 65 20 2a 69 6e 66 6f 50 74 72 3b 0a 2b  tate *infoPtr;.+
6b60: 20 20 20 20 46 69 6c 65 53 74 61 74 65 20 2a 69      FileState *i
6b70: 6e 66 6f 50 74 72 20 3d 20 28 46 69 6c 65 53 74  nfoPtr = (FileSt
6b80: 61 74 65 20 2a 29 20 69 6e 73 74 61 6e 63 65 44  ate *) instanceD
6b90: 61 74 61 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28  ata;.+.+    if (
6ba0: 61 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48  action == TCL_CH
6bb0: 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53  ANNEL_THREAD_INS
6bc0: 45 52 54 29 20 7b 0a 2b 09 69 6e 66 6f 50 74 72  ERT) {.+.infoPtr
6bd0: 2d 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64 50  ->nextPtr = tsdP
6be0: 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 72  tr->firstFilePtr
6bf0: 3b 0a 2b 09 74 73 64 50 74 72 2d 3e 66 69 72 73  ;.+.tsdPtr->firs
6c00: 74 46 69 6c 65 50 74 72 20 3d 20 69 6e 66 6f 50  tFilePtr = infoP
6c10: 74 72 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20  tr;.+    } else 
6c20: 7b 0a 20 20 20 20 20 46 69 6c 65 53 74 61 74 65  {.     FileState
6c30: 20 2a 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a 20   **nextPtrPtr;. 
6c40: 20 20 20 20 69 6e 74 20 72 65 6d 6f 76 65 64 20      int removed 
6c50: 3d 20 30 3b 0a 20 0a 2d 20 20 20 20 69 66 20 28  = 0;. .-    if (
6c60: 63 68 61 6e 50 74 72 2d 3e 74 79 70 65 50 74 72  chanPtr->typePtr
6c70: 20 21 3d 20 26 66 69 6c 65 43 68 61 6e 6e 65 6c   != &fileChannel
6c80: 54 79 70 65 29 0a 2d 20 20 20 20 20 20 20 20 72  Type).-        r
6c90: 65 74 75 72 6e 3b 0a 2d 0a 2d 20 20 20 20 69 6e  eturn;.-.-    in
6ca0: 66 6f 50 74 72 20 3d 20 28 46 69 6c 65 53 74 61  foPtr = (FileSta
6cb0: 74 65 20 2a 29 20 63 68 61 6e 50 74 72 2d 3e 69  te *) chanPtr->i
6cc0: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2d 0a 20  nstanceData;.-. 
6cd0: 20 20 20 20 66 6f 72 20 28 6e 65 78 74 50 74 72      for (nextPtr
6ce0: 50 74 72 20 3d 20 26 28 74 73 64 50 74 72 2d 3e  Ptr = &(tsdPtr->
6cf0: 66 69 72 73 74 46 69 6c 65 50 74 72 29 3b 20 28  firstFilePtr); (
6d00: 2a 6e 65 78 74 50 74 72 50 74 72 29 20 21 3d 20  *nextPtrPtr) != 
6d10: 4e 55 4c 4c 3b 0a 20 09 20 6e 65 78 74 50 74 72  NULL;. . nextPtr
6d20: 50 74 72 20 3d 20 26 28 28 2a 6e 65 78 74 50 74  Ptr = &((*nextPt
6d30: 72 50 74 72 29 2d 3e 6e 65 78 74 50 74 72 29 29  rPtr)->nextPtr))
6d40: 20 7b 0a 20 09 69 66 20 28 28 2a 6e 65 78 74 50   {. .if ((*nextP
6d50: 74 72 50 74 72 29 20 3d 3d 20 69 6e 66 6f 50 74  trPtr) == infoPt
6d60: 72 29 20 7b 0a 40 40 20 2d 31 32 35 38 2c 34 33  r) {.@@ -1258,43
6d70: 20 2b 31 32 36 38 2c 38 20 40 40 0a 20 20 20 20   +1268,8 @@.    
6d80: 20 20 2a 20 6c 6f 63 61 6c 20 64 61 74 61 20 69    * local data i
6d90: 6e 20 65 61 63 68 20 74 68 72 65 61 64 2e 0a 20  n each thread.. 
6da0: 20 20 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 69       */. .-    i
6db0: 66 20 28 21 72 65 6d 6f 76 65 64 29 0a 2b 09 69  f (!removed).+.i
6dc0: 66 20 28 21 72 65 6d 6f 76 65 64 29 20 7b 0a 20  f (!removed) {. 
6dd0: 20 20 20 20 20 20 20 20 70 61 6e 69 63 28 22 66          panic("f
6de0: 69 6c 65 20 69 6e 66 6f 20 70 74 72 20 6e 6f 74  ile info ptr not
6df0: 20 6f 6e 20 74 68 72 65 61 64 20 63 68 61 6e 6e   on thread chann
6e00: 65 6c 20 6c 69 73 74 22 29 3b 0a 2d 0a 20 7d 0a  el list");.-. }.
6e10: 2d 0c 0a 2d 2f 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d  -..-/*.- *------
6e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6e60: 0a 2d 20 2a 0a 2d 20 2a 20 54 63 6c 70 53 70 6c  .- *.- * TclpSpl
6e70: 69 63 65 46 69 6c 65 43 68 61 6e 6e 65 6c 20 2d  iceFileChannel -
6e80: 2d 0a 2d 20 2a 0a 2d 20 2a 09 49 6e 73 65 72 74  -.- *.- *.Insert
6e90: 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65   thread local re
6ea0: 66 20 66 6f 72 20 74 68 69 73 20 63 68 61 6e 6e  f for this chann
6eb0: 65 6c 2e 0a 2d 20 2a 09 54 63 6c 5f 53 70 6c 69  el..- *.Tcl_Spli
6ec0: 63 65 43 68 61 6e 6e 65 6c 20 66 6f 72 20 6d 6f  ceChannel for mo
6ed0: 72 65 20 69 6e 66 6f 2e 0a 2d 20 2a 0a 2d 20 2a  re info..- *.- *
6ee0: 20 52 65 73 75 6c 74 73 3a 0a 2d 20 2a 09 4e 6f   Results:.- *.No
6ef0: 6e 65 2e 0a 2d 20 2a 0a 2d 20 2a 20 53 69 64 65  ne..- *.- * Side
6f00: 20 65 66 66 65 63 74 73 3a 0a 2d 20 2a 09 43 68   effects:.- *.Ch
6f10: 61 6e 67 65 73 20 74 68 72 65 61 64 20 6c 6f 63  anges thread loc
6f20: 61 6c 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64  al list of valid
6f30: 20 63 68 61 6e 6e 65 6c 73 2e 0a 2d 20 2a 0a 2d   channels..- *.-
6f40: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
6f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6f80: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 2f 0a 2d 0a  --------.- */.-.
6f90: 2d 76 6f 69 64 0a 2d 54 63 6c 70 53 70 6c 69 63  -void.-TclpSplic
6fa0: 65 46 69 6c 65 43 68 61 6e 6e 65 6c 28 63 68 61  eFileChannel(cha
6fb0: 6e 29 0a 2d 20 20 20 20 54 63 6c 5f 43 68 61 6e  n).-    Tcl_Chan
6fc0: 6e 65 6c 20 63 68 61 6e 3b 09 09 09 2f 2a 20 54  nel chan;.../* T
6fd0: 68 65 20 63 68 61 6e 6e 65 6c 20 62 65 69 6e 67  he channel being
6fe0: 20 72 65 6d 6f 76 65 64 2e 20 4d 75 73 74 0a 2d   removed. Must.-
6ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7010: 20 20 20 20 20 20 20 20 20 2a 20 6e 6f 74 20 62           * not b
7020: 65 20 72 65 66 65 72 65 6e 63 65 64 20 69 6e 20  e referenced in 
7030: 61 6e 79 0a 2d 20 20 20 20 20 20 20 20 20 20 20  any.-           
7040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20                * 
7060: 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a  interpreter. */.
7070: 2d 7b 0a 2d 20 20 20 20 54 68 72 65 61 64 53 70  -{.-    ThreadSp
7080: 65 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 50  ecificData *tsdP
7090: 74 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49  tr = TCL_TSD_INI
70a0: 54 28 26 64 61 74 61 4b 65 79 29 3b 0a 2d 20 20  T(&dataKey);.-  
70b0: 20 20 43 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50    Channel *chanP
70c0: 74 72 20 3d 20 28 43 68 61 6e 6e 65 6c 20 2a 29  tr = (Channel *)
70d0: 20 63 68 61 6e 3b 0a 2d 20 20 20 20 46 69 6c 65   chan;.-    File
70e0: 53 74 61 74 65 20 2a 69 6e 66 6f 50 74 72 3b 0a  State *infoPtr;.
70f0: 2d 0a 2d 20 20 20 20 69 66 20 28 63 68 61 6e 50  -.-    if (chanP
7100: 74 72 2d 3e 74 79 70 65 50 74 72 20 21 3d 20 26  tr->typePtr != &
7110: 66 69 6c 65 43 68 61 6e 6e 65 6c 54 79 70 65 29  fileChannelType)
7120: 0a 2d 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  .-        return
7130: 3b 0a 2d 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72  ;.-.-    infoPtr
7140: 20 3d 20 28 46 69 6c 65 53 74 61 74 65 20 2a 29   = (FileState *)
7150: 20 63 68 61 6e 50 74 72 2d 3e 69 6e 73 74 61 6e   chanPtr->instan
7160: 63 65 44 61 74 61 3b 0a 2d 0a 2d 20 20 20 20 69  ceData;.-.-    i
7170: 6e 66 6f 50 74 72 2d 3e 6e 65 78 74 50 74 72 20  nfoPtr->nextPtr 
7180: 3d 20 74 73 64 50 74 72 2d 3e 66 69 72 73 74 46  = tsdPtr->firstF
7190: 69 6c 65 50 74 72 3b 0a 2d 20 20 20 20 74 73 64  ilePtr;.-    tsd
71a0: 50 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74  Ptr->firstFilePt
71b0: 72 20 3d 20 69 6e 66 6f 50 74 72 3b 0a 2b 20 20  r = infoPtr;.+  
71c0: 20 20 7d 0a 20 7d 0a 49 6e 64 65 78 3a 20 74 65    }. }.Index: te
71d0: 73 74 73 2f 69 6f 2e 74 65 73 74 0a 3d 3d 3d 3d  sts/io.test.====
71e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
71f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
7220: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f  RCS file: /cvsro
7230: 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74 73  ot/tcl/tcl/tests
7240: 2f 69 6f 2e 74 65 73 74 2c 76 0a 72 65 74 72 69  /io.test,v.retri
7250: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31  eving revision 1
7260: 2e 34 30 2e 32 2e 38 0a 64 69 66 66 20 2d 77 20  .40.2.8.diff -w 
7270: 2d 75 20 2d 72 31 2e 34 30 2e 32 2e 38 20 69 6f  -u -r1.40.2.8 io
7280: 2e 74 65 73 74 0a 2d 2d 2d 20 74 65 73 74 73 2f  .test.--- tests/
7290: 69 6f 2e 74 65 73 74 09 31 31 20 4e 6f 76 20 32  io.test.11 Nov 2
72a0: 30 30 34 20 30 31 3a 31 36 3a 32 30 20 2d 30 30  004 01:16:20 -00
72b0: 30 30 09 31 2e 34 30 2e 32 2e 38 0a 2b 2b 2b 20  00.1.40.2.8.+++ 
72c0: 74 65 73 74 73 2f 69 6f 2e 74 65 73 74 09 32 37  tests/io.test.27
72d0: 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a   Jan 2005 22:49:
72e0: 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 31 37 31  19 -0000.@@ -171
72f0: 32 2c 36 20 2b 31 37 31 32 2c 31 32 20 40 40 0a  2,6 +1712,12 @@.
7300: 20 20 20 20 20 73 65 74 20 66 20 5b 6f 70 65 6e       set f [open
7310: 20 22 7c 5b 6c 69 73 74 20 5b 69 6e 74 65 72 70   "|[list [interp
7320: 72 65 74 65 72 5d 20 24 70 61 74 68 28 73 63 72  reter] $path(scr
7330: 69 70 74 29 20 5b 61 72 72 61 79 20 67 65 74 20  ipt) [array get 
7340: 70 61 74 68 5d 5d 22 20 72 5d 0a 20 20 20 20 20  path]]" r].     
7350: 73 65 74 20 63 20 5b 67 65 74 73 20 24 66 5d 0a  set c [gets $f].
7360: 20 20 20 20 20 63 6c 6f 73 65 20 24 66 0a 2b 20       close $f.+ 
7370: 20 20 20 23 20 41 64 64 65 64 20 64 65 6c 61 79     # Added delay
7380: 20 74 6f 20 67 69 76 65 20 57 69 6e 64 6f 77 73   to give Windows
7390: 20 74 69 6d 65 20 74 6f 20 73 74 6f 70 20 74 68   time to stop th
73a0: 65 20 73 70 61 77 6e 65 64 20 70 72 6f 63 65 73  e spawned proces
73b0: 73 20 61 6e 64 20 63 6c 65 61 6e 0a 2b 20 20 20  s and clean.+   
73c0: 20 23 20 75 70 20 69 74 73 20 67 72 69 70 20 6f   # up its grip o
73d0: 6e 20 74 68 65 20 66 69 6c 65 20 74 65 73 74 31  n the file test1
73e0: 2e 20 41 64 64 65 64 20 64 65 6c 65 74 65 20 61  . Added delete a
73f0: 73 20 70 72 6f 70 65 72 20 74 65 73 74 20 63 6c  s proper test cl
7400: 65 61 6e 75 70 2e 0a 2b 20 20 20 20 23 20 54 68  eanup..+    # Th
7410: 65 20 66 61 69 6c 69 6e 67 20 74 65 73 74 73 20  e failing tests 
7420: 77 65 72 65 20 31 38 2e 31 20 61 6e 64 20 31 38  were 18.1 and 18
7430: 2e 32 20 61 73 20 66 69 72 73 74 20 72 65 2d 75  .2 as first re-u
7440: 73 65 72 73 20 6f 66 20 66 69 6c 65 20 22 74 65  sers of file "te
7450: 73 74 31 22 2e 0a 2b 20 20 20 20 61 66 74 65 72  st1"..+    after
7460: 20 31 30 30 30 30 0a 2b 20 20 20 20 66 69 6c 65   10000.+    file
7470: 20 64 65 6c 65 74 65 20 24 70 61 74 68 28 73 63   delete $path(sc
7480: 72 69 70 74 29 0a 2b 20 20 20 20 66 69 6c 65 20  ript).+    file 
7490: 64 65 6c 65 74 65 20 24 70 61 74 68 28 74 65 73  delete $path(tes
74a0: 74 31 29 0a 20 20 20 20 20 73 65 74 20 63 0a 20  t1).     set c. 
74b0: 7d 20 68 65 6c 6c 6f 0a 20 0a 49 6e 64 65 78 3a  } hello. .Index:
74c0: 20 75 6e 69 78 2f 74 63 6c 55 6e 69 78 43 68 61   unix/tclUnixCha
74d0: 6e 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  n.c.============
74e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
74f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7510: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65  =======.RCS file
7520: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74  : /cvsroot/tcl/t
7530: 63 6c 2f 75 6e 69 78 2f 74 63 6c 55 6e 69 78 43  cl/unix/tclUnixC
7540: 68 61 6e 2e 63 2c 76 0a 72 65 74 72 69 65 76 69  han.c,v.retrievi
7550: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 34 32  ng revision 1.42
7560: 2e 32 2e 34 0a 64 69 66 66 20 2d 77 20 2d 75 20  .2.4.diff -w -u 
7570: 2d 72 31 2e 34 32 2e 32 2e 34 20 74 63 6c 55 6e  -r1.42.2.4 tclUn
7580: 69 78 43 68 61 6e 2e 63 0a 2d 2d 2d 20 75 6e 69  ixChan.c.--- uni
7590: 78 2f 74 63 6c 55 6e 69 78 43 68 61 6e 2e 63 09  x/tclUnixChan.c.
75a0: 31 37 20 4e 6f 76 20 32 30 30 34 20 30 32 3a 35  17 Nov 2004 02:5
75b0: 32 3a 32 35 20 2d 30 30 30 30 09 31 2e 34 32 2e  2:25 -0000.1.42.
75c0: 32 2e 34 0a 2b 2b 2b 20 75 6e 69 78 2f 74 63 6c  2.4.+++ unix/tcl
75d0: 55 6e 69 78 43 68 61 6e 2e 63 09 32 37 20 4a 61  UnixChan.c.27 Ja
75e0: 6e 20 32 30 30 35 20 32 32 3a 34 39 3a 31 39 20  n 2005 22:49:19 
75f0: 2d 30 30 30 30 0a 40 40 20 2d 32 35 30 2c 36 20  -0000.@@ -250,6 
7600: 2b 32 35 30 2c 31 30 20 40 40 0a 20 09 09 09 20  +250,10 @@. ... 
7610: 20 20 20 69 6e 74 20 74 6f 57 72 69 74 65 2c 20     int toWrite, 
7620: 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 29 29  int *errorCode))
7630: 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 46  ;. static int..F
7640: 69 6c 65 53 65 65 6b 50 72 6f 63 20 5f 41 4e 53  ileSeekProc _ANS
7650: 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 44  I_ARGS_((ClientD
7660: 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61  ata instanceData
7670: 2c 0a 20 09 09 09 20 20 20 20 6c 6f 6e 67 20 6f  ,. ...    long o
7680: 66 66 73 65 74 2c 20 69 6e 74 20 6d 6f 64 65 2c  ffset, int mode,
7690: 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 29   int *errorCode)
76a0: 29 3b 0a 2b 23 69 66 64 65 66 20 44 45 50 52 45  );.+#ifdef DEPRE
76b0: 43 41 54 45 44 0a 2b 73 74 61 74 69 63 20 76 6f  CATED.+static vo
76c0: 69 64 20 20 20 20 20 20 20 20 20 20 20 20 20 46  id             F
76d0: 69 6c 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50  ileThreadActionP
76e0: 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 20  roc _ANSI_ARGS_ 
76f0: 28 28 0a 2b 09 09 09 20 20 20 43 6c 69 65 6e 74  ((.+...   Client
7700: 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74  Data instanceDat
7710: 61 2c 20 69 6e 74 20 61 63 74 69 6f 6e 29 29 3b  a, int action));
7720: 0a 2b 23 65 6e 64 69 66 0a 20 73 74 61 74 69 63  .+#endif. static
7730: 20 54 63 6c 5f 57 69 64 65 49 6e 74 09 46 69 6c   Tcl_WideInt.Fil
7740: 65 57 69 64 65 53 65 65 6b 50 72 6f 63 20 5f 41  eWideSeekProc _A
7750: 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e  NSI_ARGS_((Clien
7760: 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61  tData instanceDa
7770: 74 61 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f  ta,. ...    Tcl_
7780: 57 69 64 65 49 6e 74 20 6f 66 66 73 65 74 2c 20  WideInt offset, 
7790: 69 6e 74 20 6d 6f 64 65 2c 20 69 6e 74 20 2a 65  int mode, int *e
77a0: 72 72 6f 72 43 6f 64 65 29 29 3b 0a 20 73 74 61  rrorCode));. sta
77b0: 74 69 63 20 76 6f 69 64 09 09 46 69 6c 65 57 61  tic void..FileWa
77c0: 74 63 68 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52  tchProc _ANSI_AR
77d0: 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 61 20  GS_((ClientData 
77e0: 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 0a 40 40  instanceData,.@@
77f0: 20 2d 33 30 35 2c 37 20 2b 33 30 39 2c 37 20 40   -305,7 +309,7 @
7800: 40 0a 20 0a 20 73 74 61 74 69 63 20 54 63 6c 5f  @. . static Tcl_
7810: 43 68 61 6e 6e 65 6c 54 79 70 65 20 66 69 6c 65  ChannelType file
7820: 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a  ChannelType = {.
7830: 20 20 20 20 20 22 66 69 6c 65 22 2c 09 09 09 2f       "file",.../
7840: 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a 2f 0a  * Type name. */.
7850: 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c  -    TCL_CHANNEL
7860: 5f 56 45 52 53 49 4f 4e 5f 33 2c 09 2f 2a 20 76  _VERSION_3,./* v
7870: 33 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b 20 20  3 channel */.+  
7880: 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45    TCL_CHANNEL_VE
7890: 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 63  RSION_4,./* v4 c
78a0: 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 46  hannel */.     F
78b0: 69 6c 65 43 6c 6f 73 65 50 72 6f 63 2c 09 09 2f  ileCloseProc,../
78c0: 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a 2f  * Close proc. */
78d0: 0a 20 20 20 20 20 46 69 6c 65 49 6e 70 75 74 50  .     FileInputP
78e0: 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20 70  roc,../* Input p
78f0: 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 46 69 6c  roc. */.     Fil
7900: 65 4f 75 74 70 75 74 50 72 6f 63 2c 09 09 2f 2a  eOutputProc,../*
7910: 20 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f   Output proc. */
7920: 0a 40 40 20 2d 33 31 39 2c 36 20 2b 33 32 33 2c  .@@ -319,6 +323,
7930: 31 31 20 40 40 0a 20 20 20 20 20 4e 55 4c 4c 2c  11 @@.     NULL,
7940: 09 09 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63  .../* flush proc
7950: 2e 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09  . */.     NULL,.
7960: 09 09 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f  ../* handler pro
7970: 63 2e 20 2a 2f 0a 20 20 20 20 20 46 69 6c 65 57  c. */.     FileW
7980: 69 64 65 53 65 65 6b 50 72 6f 63 2c 09 09 2f 2a  ideSeekProc,../*
7990: 20 77 69 64 65 20 73 65 65 6b 20 70 72 6f 63 2e   wide seek proc.
79a0: 20 2a 2f 0a 2b 23 69 66 64 65 66 20 44 45 50 52   */.+#ifdef DEPR
79b0: 45 43 41 54 45 44 0a 2b 20 20 20 20 46 69 6c 65  ECATED.+    File
79c0: 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63  ThreadActionProc
79d0: 2c 20 20 20 20 20 20 20 2f 2a 20 74 68 72 65 61  ,       /* threa
79e0: 64 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 2b 23 65  d actions */.+#e
79f0: 6c 73 65 0a 2b 20 20 20 20 4e 55 4c 4c 2c 0a 2b  lse.+    NULL,.+
7a00: 23 65 6e 64 69 66 0a 20 7d 3b 0a 20 0a 20 23 69  #endif. };. . #i
7a10: 66 64 65 66 20 53 55 50 50 4f 52 54 53 5f 54 54  fdef SUPPORTS_TT
7a20: 59 0a 40 40 20 2d 33 32 39 2c 37 20 2b 33 33 38  Y.@@ -329,7 +338
7a30: 2c 37 20 40 40 0a 20 0a 20 73 74 61 74 69 63 20  ,7 @@. . static 
7a40: 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20  Tcl_ChannelType 
7a50: 74 74 79 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d  ttyChannelType =
7a60: 20 7b 0a 20 20 20 20 20 22 74 74 79 22 2c 09 09   {.     "tty",..
7a70: 09 2f 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a  ./* Type name. *
7a80: 2f 0a 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e  /.-    TCL_CHANN
7a90: 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 2c 09 2f 2a  EL_VERSION_2,./*
7aa0: 20 76 32 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b   v2 channel */.+
7ab0: 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f      TCL_CHANNEL_
7ac0: 56 45 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34  VERSION_4,./* v4
7ad0: 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20   channel */.    
7ae0: 20 54 74 79 43 6c 6f 73 65 50 72 6f 63 2c 09 09   TtyCloseProc,..
7af0: 2f 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a  /* Close proc. *
7b00: 2f 0a 20 20 20 20 20 46 69 6c 65 49 6e 70 75 74  /.     FileInput
7b10: 50 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20  Proc,../* Input 
7b20: 70 72 6f 63 2e 20 2a 2f 0a 20 23 69 66 20 42 41  proc. */. #if BA
7b30: 44 5f 54 49 50 33 35 5f 46 4c 55 53 48 0a 40 40  D_TIP35_FLUSH.@@
7b40: 20 2d 33 34 36 2c 36 20 2b 33 35 35 2c 38 20 40   -346,6 +355,8 @
7b50: 40 0a 20 20 20 20 20 46 69 6c 65 42 6c 6f 63 6b  @.     FileBlock
7b60: 4d 6f 64 65 50 72 6f 63 2c 09 09 2f 2a 20 53 65  ModeProc,../* Se
7b70: 74 20 62 6c 6f 63 6b 69 6e 67 20 6f 72 20 6e 6f  t blocking or no
7b80: 6e 2d 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e  n-blocking mode.
7b90: 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09  */.     NULL,...
7ba0: 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e 20 2a  /* flush proc. *
7bb0: 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f  /.     NULL,.../
7bc0: 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 2e 20  * handler proc. 
7bd0: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 09  */.+    NULL,...
7be0: 2f 2a 20 77 69 64 65 20 73 65 65 6b 20 70 72 6f  /* wide seek pro
7bf0: 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c  c. */.+    NULL,
7c00: 09 09 09 2f 2a 20 74 68 72 65 61 64 20 61 63 74  .../* thread act
7c10: 69 6f 6e 20 70 72 6f 63 2e 20 2a 2f 0a 20 7d 3b  ion proc. */. };
7c20: 0a 20 23 65 6e 64 69 66 09 2f 2a 20 53 55 50 50  . #endif./* SUPP
7c30: 4f 52 54 53 5f 54 54 59 20 2a 2f 0a 20 0a 40 40  ORTS_TTY */. .@@
7c40: 20 2d 33 35 36 2c 37 20 2b 33 36 37 2c 37 20 40   -356,7 +367,7 @
7c50: 40 0a 20 0a 20 73 74 61 74 69 63 20 54 63 6c 5f  @. . static Tcl_
7c60: 43 68 61 6e 6e 65 6c 54 79 70 65 20 74 63 70 43  ChannelType tcpC
7c70: 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a 20  hannelType = {. 
7c80: 20 20 20 20 22 74 63 70 22 2c 09 09 09 2f 2a 20      "tcp",.../* 
7c90: 54 79 70 65 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20  Type name. */.- 
7ca0: 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56     TCL_CHANNEL_V
7cb0: 45 52 53 49 4f 4e 5f 32 2c 09 2f 2a 20 76 32 20  ERSION_2,./* v2 
7cc0: 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b 20 20 20 20  channel */.+    
7cd0: 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53  TCL_CHANNEL_VERS
7ce0: 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 63 68 61  ION_4,./* v4 cha
7cf0: 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 54 63 70  nnel */.     Tcp
7d00: 43 6c 6f 73 65 50 72 6f 63 2c 09 09 2f 2a 20 43  CloseProc,../* C
7d10: 6c 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 20  lose proc. */.  
7d20: 20 20 20 54 63 70 49 6e 70 75 74 50 72 6f 63 2c     TcpInputProc,
7d30: 09 09 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e  ../* Input proc.
7d40: 20 2a 2f 0a 20 20 20 20 20 54 63 70 4f 75 74 70   */.     TcpOutp
7d50: 75 74 50 72 6f 63 2c 09 09 2f 2a 20 4f 75 74 70  utProc,../* Outp
7d60: 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d  ut proc. */.@@ -
7d70: 33 36 39 2c 36 20 2b 33 38 30 2c 38 20 40 40 0a  369,6 +380,8 @@.
7d80: 20 20 20 20 20 54 63 70 42 6c 6f 63 6b 4d 6f 64       TcpBlockMod
7d90: 65 50 72 6f 63 2c 09 09 2f 2a 20 53 65 74 20 62  eProc,../* Set b
7da0: 6c 6f 63 6b 69 6e 67 20 6f 72 20 6e 6f 6e 2d 62  locking or non-b
7db0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a  locking mode.*/.
7dc0: 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20       NULL,.../* 
7dd0: 66 6c 75 73 68 20 70 72 6f 63 2e 20 2a 2f 0a 20  flush proc. */. 
7de0: 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 68      NULL,.../* h
7df0: 61 6e 64 6c 65 72 20 70 72 6f 63 2e 20 2a 2f 0a  andler proc. */.
7e00: 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20  +    NULL,.../* 
7e10: 77 69 64 65 20 73 65 65 6b 20 70 72 6f 63 2e 20  wide seek proc. 
7e20: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 09  */.+    NULL,...
7e30: 2f 2a 20 74 68 72 65 61 64 20 61 63 74 69 6f 6e  /* thread action
7e40: 20 70 72 6f 63 2e 20 2a 2f 0a 20 7d 3b 0a 20 0a   proc. */. };. .
7e50: 20 0c 0a 40 40 20 2d 31 38 34 30 2c 38 20 2b 31   ..@@ -1840,8 +1
7e60: 38 35 33 2c 31 31 20 40 40 0a 20 0a 20 23 69 66  853,11 @@. . #if
7e70: 64 65 66 20 44 45 50 52 45 43 41 54 45 44 0a 20  def DEPRECATED. 
7e80: 20 20 20 20 69 66 20 28 63 68 61 6e 6e 65 6c 54      if (channelT
7e90: 79 70 65 50 74 72 20 3d 3d 20 26 66 69 6c 65 43  ypePtr == &fileC
7ea0: 68 61 6e 6e 65 6c 54 79 70 65 29 20 7b 0a 2d 20  hannelType) {.- 
7eb0: 20 20 20 20 20 20 20 66 73 50 74 72 2d 3e 6e 65         fsPtr->ne
7ec0: 78 74 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e  xtPtr = tsdPtr->
7ed0: 66 69 72 73 74 46 69 6c 65 50 74 72 3b 0a 2d 20  firstFilePtr;.- 
7ee0: 20 20 20 20 20 20 20 74 73 64 50 74 72 2d 3e 66         tsdPtr->f
7ef0: 69 72 73 74 46 69 6c 65 50 74 72 20 3d 20 66 73  irstFilePtr = fs
7f00: 50 74 72 3b 0a 2b 20 20 20 20 20 20 20 20 2f 2a  Ptr;.+        /*
7f10: 20 54 49 50 20 23 32 31 38 2e 20 52 65 6d 6f 76   TIP #218. Remov
7f20: 65 64 20 74 68 65 20 63 6f 64 65 20 69 6e 73 65  ed the code inse
7f30: 72 74 69 6e 67 20 74 68 65 20 6e 65 77 20 73 74  rting the new st
7f40: 72 75 63 74 75 72 65 0a 2b 09 20 2a 20 69 6e 74  ructure.+. * int
7f50: 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 6c 69 73  o the global lis
7f60: 74 2e 20 54 68 69 73 20 69 73 20 6e 6f 77 20 68  t. This is now h
7f70: 61 6e 64 6c 65 64 20 69 6e 20 74 68 65 20 74 68  andled in the th
7f80: 72 65 61 64 0a 2b 09 20 2a 20 61 63 74 69 6f 6e  read.+. * action
7f90: 20 63 61 6c 6c 62 61 63 6b 73 2c 20 61 6e 64 20   callbacks, and 
7fa0: 6f 6e 6c 79 20 74 68 65 72 65 2e 0a 2b 09 20 2a  only there..+. *
7fb0: 2f 0a 2b 20 20 20 20 20 20 20 20 66 73 50 74 72  /.+        fsPtr
7fc0: 2d 3e 6e 65 78 74 50 74 72 20 3d 20 4e 55 4c 4c  ->nextPtr = NULL
7fd0: 3b 0a 20 20 20 20 20 7d 0a 20 23 65 6e 64 69 66  ;.     }. #endif
7fe0: 20 2f 2a 20 44 45 50 52 45 43 41 54 45 44 20 2a   /* DEPRECATED *
7ff0: 2f 0a 20 20 20 20 20 66 73 50 74 72 2d 3e 76 61  /.     fsPtr->va
8000: 6c 69 64 4d 61 73 6b 20 3d 20 63 68 61 6e 6e 65  lidMask = channe
8010: 6c 50 65 72 6d 69 73 73 69 6f 6e 73 20 7c 20 54  lPermissions | T
8020: 43 4c 5f 45 58 43 45 50 54 49 4f 4e 3b 0a 40 40  CL_EXCEPTION;.@@
8030: 20 2d 33 32 38 31 2c 31 33 20 2b 33 32 39 37 2c   -3281,13 +3297,
8040: 31 33 20 40 40 0a 20 20 20 20 20 72 65 74 75 72  13 @@.     retur
8050: 6e 20 72 65 73 75 6c 74 3b 0a 20 7d 0a 20 0c 0a  n result;. }. ..
8060: 2b 23 69 66 64 65 66 20 44 45 50 52 45 43 41 54  +#ifdef DEPRECAT
8070: 45 44 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d  ED. /*.  *------
8080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
80a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
80b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
80c0: 0a 20 20 2a 0a 2d 20 2a 20 54 63 6c 70 43 75 74  .  *.- * TclpCut
80d0: 46 69 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2b  FileChannel --.+
80e0: 20 2a 20 46 69 6c 65 54 68 72 65 61 64 41 63 74   * FileThreadAct
80f0: 69 6f 6e 50 72 6f 63 20 2d 2d 0a 20 20 2a 0a 2d  ionProc --.  *.-
8100: 20 2a 09 52 65 6d 6f 76 65 20 61 6e 79 20 74 68   *.Remove any th
8110: 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 73 20  read local refs 
8120: 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e  to this channel.
8130: 20 53 65 65 0a 2d 20 2a 09 54 63 6c 5f 43 75 74   See.- *.Tcl_Cut
8140: 43 68 61 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65  Channel for more
8150: 20 69 6e 66 6f 2e 0a 2b 20 2a 09 49 6e 73 65 72   info..+ *.Inser
8160: 74 20 6f 72 20 72 65 6d 6f 76 65 20 61 6e 79 20  t or remove any 
8170: 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66  thread local ref
8180: 73 20 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65  s to this channe
8190: 6c 2e 0a 20 20 2a 0a 20 20 2a 20 52 65 73 75 6c  l..  *.  * Resul
81a0: 74 73 3a 0a 20 20 2a 09 4e 6f 6e 65 2e 0a 40 40  ts:.  *.None..@@
81b0: 20 2d 33 32 39 38 2c 32 34 20 2b 33 33 31 34 2c   -3298,24 +3314,
81c0: 32 31 20 40 40 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d  21 @@.  *-------
81d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
81e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
81f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
8210: 20 20 2a 2f 0a 20 0a 2d 76 6f 69 64 0a 2d 54 63    */. .-void.-Tc
8220: 6c 70 43 75 74 46 69 6c 65 43 68 61 6e 6e 65 6c  lpCutFileChannel
8230: 28 63 68 61 6e 29 0a 2d 20 20 20 20 54 63 6c 5f  (chan).-    Tcl_
8240: 43 68 61 6e 6e 65 6c 20 63 68 61 6e 3b 09 09 09  Channel chan;...
8250: 2f 2a 20 54 68 65 20 63 68 61 6e 6e 65 6c 20 62  /* The channel b
8260: 65 69 6e 67 20 72 65 6d 6f 76 65 64 2e 20 4d 75  eing removed. Mu
8270: 73 74 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20  st.-            
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 6e               * n
82a0: 6f 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 64  ot be referenced
82b0: 20 69 6e 20 61 6e 79 0a 2d 20 20 20 20 20 20 20   in any.-       
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82e0: 20 20 2a 20 69 6e 74 65 72 70 72 65 74 65 72 2e    * interpreter.
82f0: 20 2a 2f 0a 2b 73 74 61 74 69 63 20 76 6f 69 64   */.+static void
8300: 0a 2b 46 69 6c 65 54 68 72 65 61 64 41 63 74 69  .+FileThreadActi
8310: 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 6e 63 65  onProc (instance
8320: 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 0a 2b 20  Data, action).+ 
8330: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69      ClientData i
8340: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20  nstanceData;.+  
8350: 20 20 20 69 6e 74 20 61 63 74 69 6f 6e 3b 0a 20     int action;. 
8360: 7b 0a 2d 23 69 66 64 65 66 20 44 45 50 52 45 43  {.-#ifdef DEPREC
8370: 41 54 45 44 0a 20 20 20 20 20 54 68 72 65 61 64  ATED.     Thread
8380: 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 73  SpecificData *ts
8390: 64 50 74 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49  dPtr = TCL_TSD_I
83a0: 4e 49 54 28 26 64 61 74 61 4b 65 79 29 3b 0a 2d  NIT(&dataKey);.-
83b0: 20 20 20 20 43 68 61 6e 6e 65 6c 20 2a 63 68 61      Channel *cha
83c0: 6e 50 74 72 20 3d 20 28 43 68 61 6e 6e 65 6c 20  nPtr = (Channel 
83d0: 2a 29 20 63 68 61 6e 3b 0a 2d 20 20 20 20 46 69  *) chan;.-    Fi
83e0: 6c 65 53 74 61 74 65 20 2a 66 73 50 74 72 3b 0a  leState *fsPtr;.
83f0: 2b 20 20 20 20 46 69 6c 65 53 74 61 74 65 20 2a  +    FileState *
8400: 66 73 50 74 72 20 3d 20 28 46 69 6c 65 53 74 61  fsPtr = (FileSta
8410: 74 65 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 61  te *) instanceDa
8420: 74 61 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 61  ta;.+.+    if (a
8430: 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41  ction == TCL_CHA
8440: 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45  NNEL_THREAD_INSE
8450: 52 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 66  RT) {.+        f
8460: 73 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 20 20  sPtr->nextPtr   
8470: 20 20 20 20 3d 20 74 73 64 50 74 72 2d 3e 66 69      = tsdPtr->fi
8480: 72 73 74 46 69 6c 65 50 74 72 3b 0a 2b 09 74 73  rstFilePtr;.+.ts
8490: 64 50 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50  dPtr->firstFileP
84a0: 74 72 20 3d 20 66 73 50 74 72 3b 0a 2b 20 20 20  tr = fsPtr;.+   
84b0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 46   } else {.     F
84c0: 69 6c 65 53 74 61 74 65 20 2a 2a 6e 65 78 74 50  ileState **nextP
84d0: 74 72 50 74 72 3b 0a 20 20 20 20 20 69 6e 74 20  trPtr;.     int 
84e0: 72 65 6d 6f 76 65 64 20 3d 20 30 3b 0a 20 0a 2d  removed = 0;. .-
84f0: 20 20 20 20 69 66 20 28 63 68 61 6e 50 74 72 2d      if (chanPtr-
8500: 3e 74 79 70 65 50 74 72 20 21 3d 20 26 66 69 6c  >typePtr != &fil
8510: 65 43 68 61 6e 6e 65 6c 54 79 70 65 29 0a 2d 20  eChannelType).- 
8520: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 2d         return;.-
8530: 0a 2d 20 20 20 20 66 73 50 74 72 20 3d 20 28 46  .-    fsPtr = (F
8540: 69 6c 65 53 74 61 74 65 20 2a 29 20 63 68 61 6e  ileState *) chan
8550: 50 74 72 2d 3e 69 6e 73 74 61 6e 63 65 44 61 74  Ptr->instanceDat
8560: 61 3b 0a 2d 0a 20 20 20 20 20 66 6f 72 20 28 6e  a;.-.     for (n
8570: 65 78 74 50 74 72 50 74 72 20 3d 20 26 28 74 73  extPtrPtr = &(ts
8580: 64 50 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50  dPtr->firstFileP
8590: 74 72 29 3b 20 28 2a 6e 65 78 74 50 74 72 50 74  tr); (*nextPtrPt
85a0: 72 29 20 21 3d 20 4e 55 4c 4c 3b 0a 20 09 20 6e  r) != NULL;. . n
85b0: 65 78 74 50 74 72 50 74 72 20 3d 20 26 28 28 2a  extPtrPtr = &((*
85c0: 6e 65 78 74 50 74 72 50 74 72 29 2d 3e 6e 65 78  nextPtrPtr)->nex
85d0: 74 50 74 72 29 29 20 7b 0a 20 09 69 66 20 28 28  tPtr)) {. .if ((
85e0: 2a 6e 65 78 74 50 74 72 50 74 72 29 20 3d 3d 20  *nextPtrPtr) == 
85f0: 66 73 50 74 72 29 20 7b 0a 40 40 20 2d 33 33 32  fsPtr) {.@@ -332
8600: 36 2c 35 31 20 2b 33 33 33 39 2c 31 35 20 40 40  6,51 +3339,15 @@
8610: 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20 2f  .     }. .     /
8620: 2a 0a 2d 20 20 20 20 20 2a 20 54 68 69 73 20 63  *.-     * This c
8630: 6f 75 6c 64 20 68 61 70 70 65 6e 20 69 66 20 74  ould happen if t
8640: 68 65 20 63 68 61 6e 6e 65 6c 20 77 61 73 20 63  he channel was c
8650: 72 65 61 74 65 64 20 69 6e 20 6f 6e 65 20 74 68  reated in one th
8660: 72 65 61 64 0a 2d 20 20 20 20 20 2a 20 61 6e 64  read.-     * and
8670: 20 74 68 65 6e 20 6d 6f 76 65 64 20 74 6f 20 61   then moved to a
8680: 6e 6f 74 68 65 72 20 77 69 74 68 6f 75 74 20 75  nother without u
8690: 70 64 61 74 69 6e 67 20 74 68 65 20 74 68 72 65  pdating the thre
86a0: 61 64 0a 2d 20 20 20 20 20 2a 20 6c 6f 63 61 6c  ad.-     * local
86b0: 20 64 61 74 61 20 69 6e 20 65 61 63 68 20 74 68   data in each th
86c0: 72 65 61 64 2e 0a 2b 09 20 2a 20 54 68 69 73 20  read..+. * This 
86d0: 63 6f 75 6c 64 20 68 61 70 70 65 6e 20 69 66 20  could happen if 
86e0: 74 68 65 20 63 68 61 6e 6e 65 6c 20 77 61 73 20  the channel was 
86f0: 63 72 65 61 74 65 64 20 69 6e 20 6f 6e 65 0a 2b  created in one.+
8700: 09 20 2a 20 74 68 72 65 61 64 20 61 6e 64 20 74  . * thread and t
8710: 68 65 6e 20 6d 6f 76 65 64 20 74 6f 20 61 6e 6f  hen moved to ano
8720: 74 68 65 72 20 77 69 74 68 6f 75 74 20 75 70 64  ther without upd
8730: 61 74 69 6e 67 0a 2b 09 20 2a 20 74 68 65 20 74  ating.+. * the t
8740: 68 72 65 61 64 20 6c 6f 63 61 6c 20 64 61 74 61  hread local data
8750: 20 69 6e 20 65 61 63 68 20 74 68 72 65 61 64 2e   in each thread.
8760: 0a 20 20 20 20 20 20 2a 2f 0a 20 0a 2d 20 20 20  .      */. .-   
8770: 20 69 66 20 28 21 72 65 6d 6f 76 65 64 29 0a 2b   if (!removed).+
8780: 09 69 66 20 28 21 72 65 6d 6f 76 65 64 29 20 7b  .if (!removed) {
8790: 0a 20 20 20 20 20 20 20 20 20 70 61 6e 69 63 28  .         panic(
87a0: 22 66 69 6c 65 20 69 6e 66 6f 20 70 74 72 20 6e  "file info ptr n
87b0: 6f 74 20 6f 6e 20 74 68 72 65 61 64 20 63 68 61  ot on thread cha
87c0: 6e 6e 65 6c 20 6c 69 73 74 22 29 3b 0a 2d 0a 2d  nnel list");.-.-
87d0: 23 65 6e 64 69 66 20 2f 2a 20 44 45 50 52 45 43  #endif /* DEPREC
87e0: 41 54 45 44 20 2a 2f 0a 20 7d 0a 2d 0c 0a 2d 2f  ATED */. }.-..-/
87f0: 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.- *-----------
8800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a  -----------.- *.
8840: 2d 20 2a 20 54 63 6c 70 53 70 6c 69 63 65 46 69  - * TclpSpliceFi
8850: 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2d 20 2a  leChannel --.- *
8860: 0a 2d 20 2a 09 49 6e 73 65 72 74 20 74 68 72 65  .- *.Insert thre
8870: 61 64 20 6c 6f 63 61 6c 20 72 65 66 20 66 6f 72  ad local ref for
8880: 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 2d   this channel..-
8890: 20 2a 09 54 63 6c 5f 53 70 6c 69 63 65 43 68 61   *.Tcl_SpliceCha
88a0: 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 20 69 6e  nnel for more in
88b0: 66 6f 2e 0a 2d 20 2a 0a 2d 20 2a 20 52 65 73 75  fo..- *.- * Resu
88c0: 6c 74 73 3a 0a 2d 20 2a 09 4e 6f 6e 65 2e 0a 2d  lts:.- *.None..-
88d0: 20 2a 0a 2d 20 2a 20 53 69 64 65 20 65 66 66 65   *.- * Side effe
88e0: 63 74 73 3a 0a 2d 20 2a 09 43 68 61 6e 67 65 73  cts:.- *.Changes
88f0: 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 6c 69   thread local li
8900: 73 74 20 6f 66 20 76 61 6c 69 64 20 63 68 61 6e  st of valid chan
8910: 6e 65 6c 73 2e 0a 2d 20 2a 0a 2d 20 2a 2d 2d 2d  nels..- *.- *---
8920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8960: 2d 2d 2d 0a 2d 20 2a 2f 0a 2d 0a 2d 76 6f 69 64  ---.- */.-.-void
8970: 0a 2d 54 63 6c 70 53 70 6c 69 63 65 46 69 6c 65  .-TclpSpliceFile
8980: 43 68 61 6e 6e 65 6c 28 63 68 61 6e 29 0a 2d 20  Channel(chan).- 
8990: 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63     Tcl_Channel c
89a0: 68 61 6e 3b 09 09 09 2f 2a 20 54 68 65 20 63 68  han;.../* The ch
89b0: 61 6e 6e 65 6c 20 62 65 69 6e 67 20 72 65 6d 6f  annel being remo
89c0: 76 65 64 2e 20 4d 75 73 74 0a 2d 20 20 20 20 20  ved. Must.-     
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89f0: 20 20 20 20 2a 20 6e 6f 74 20 62 65 20 72 65 66      * not be ref
8a00: 65 72 65 6e 63 65 64 20 69 6e 20 61 6e 79 0a 2d  erenced in any.-
8a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a30: 20 20 20 20 20 20 20 20 20 2a 20 69 6e 74 65 72           * inter
8a40: 70 72 65 74 65 72 2e 20 2a 2f 0a 2d 7b 0a 2d 23  preter. */.-{.-#
8a50: 69 66 64 65 66 20 44 45 50 52 45 43 41 54 45 44  ifdef DEPRECATED
8a60: 0a 2d 20 20 20 20 54 68 72 65 61 64 53 70 65 63  .-    ThreadSpec
8a70: 69 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 72  ificData *tsdPtr
8a80: 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54 28   = TCL_TSD_INIT(
8a90: 26 64 61 74 61 4b 65 79 29 3b 0a 2d 20 20 20 20  &dataKey);.-    
8aa0: 43 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50 74 72  Channel *chanPtr
8ab0: 20 3d 20 28 43 68 61 6e 6e 65 6c 20 2a 29 20 63   = (Channel *) c
8ac0: 68 61 6e 3b 0a 2d 20 20 20 20 46 69 6c 65 53 74  han;.-    FileSt
8ad0: 61 74 65 20 2a 66 73 50 74 72 3b 0a 2d 0a 2d 20  ate *fsPtr;.-.- 
8ae0: 20 20 20 69 66 20 28 63 68 61 6e 50 74 72 2d 3e     if (chanPtr->
8af0: 74 79 70 65 50 74 72 20 21 3d 20 26 66 69 6c 65  typePtr != &file
8b00: 43 68 61 6e 6e 65 6c 54 79 70 65 29 0a 2d 20 20  ChannelType).-  
8b10: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 2d 0a        return;.-.
8b20: 2d 20 20 20 20 66 73 50 74 72 20 3d 20 28 46 69  -    fsPtr = (Fi
8b30: 6c 65 53 74 61 74 65 20 2a 29 20 63 68 61 6e 50  leState *) chanP
8b40: 74 72 2d 3e 69 6e 73 74 61 6e 63 65 44 61 74 61  tr->instanceData
8b50: 3b 0a 2d 0a 2d 20 20 20 20 66 73 50 74 72 2d 3e  ;.-.-    fsPtr->
8b60: 6e 65 78 74 50 74 72 20 3d 20 74 73 64 50 74 72  nextPtr = tsdPtr
8b70: 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 72 3b 0a  ->firstFilePtr;.
8b80: 2d 20 20 20 20 74 73 64 50 74 72 2d 3e 66 69 72  -    tsdPtr->fir
8b90: 73 74 46 69 6c 65 50 74 72 20 3d 20 66 73 50 74  stFilePtr = fsPt
8ba0: 72 3b 0a 2d 23 65 6e 64 69 66 20 2f 2a 20 44 45  r;.-#endif /* DE
8bb0: 50 52 45 43 41 54 45 44 20 2a 2f 0a 20 7d 0a 2b  PRECATED */. }.+
8bc0: 7d 0a 2b 23 65 6e 64 69 66 20 2f 2a 20 44 45 50  }.+#endif /* DEP
8bd0: 52 45 43 41 54 45 44 20 2a 2f 0a 2b 0a 49 6e 64  RECATED */.+.Ind
8be0: 65 78 3a 20 75 6e 69 78 2f 74 63 6c 55 6e 69 78  ex: unix/tclUnix
8bf0: 50 69 70 65 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d  Pipe.c.=========
8c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66  ==========.RCS f
8c40: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63  ile: /cvsroot/tc
8c50: 6c 2f 74 63 6c 2f 75 6e 69 78 2f 74 63 6c 55 6e  l/tcl/unix/tclUn
8c60: 69 78 50 69 70 65 2e 63 2c 76 0a 72 65 74 72 69  ixPipe.c,v.retri
8c70: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31  eving revision 1
8c80: 2e 32 33 2e 32 2e 32 0a 64 69 66 66 20 2d 77 20  .23.2.2.diff -w 
8c90: 2d 75 20 2d 72 31 2e 32 33 2e 32 2e 32 20 74 63  -u -r1.23.2.2 tc
8ca0: 6c 55 6e 69 78 50 69 70 65 2e 63 0a 2d 2d 2d 20  lUnixPipe.c.--- 
8cb0: 75 6e 69 78 2f 74 63 6c 55 6e 69 78 50 69 70 65  unix/tclUnixPipe
8cc0: 2e 63 09 38 20 4a 75 6e 20 32 30 30 34 20 32 30  .c.8 Jun 2004 20
8cd0: 3a 34 33 3a 33 33 20 2d 30 30 30 30 09 31 2e 32  :43:33 -0000.1.2
8ce0: 33 2e 32 2e 32 0a 2b 2b 2b 20 75 6e 69 78 2f 74  3.2.2.+++ unix/t
8cf0: 63 6c 55 6e 69 78 50 69 70 65 2e 63 09 32 37 20  clUnixPipe.c.27 
8d00: 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a 31  Jan 2005 22:49:1
8d10: 39 20 2d 30 30 30 30 0a 40 40 20 2d 37 32 2c 37  9 -0000.@@ -72,7
8d20: 20 2b 37 32 2c 37 20 40 40 0a 20 0a 20 73 74 61   +72,7 @@. . sta
8d30: 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54  tic Tcl_ChannelT
8d40: 79 70 65 20 70 69 70 65 43 68 61 6e 6e 65 6c 54  ype pipeChannelT
8d50: 79 70 65 20 3d 20 7b 0a 20 20 20 20 20 22 70 69  ype = {.     "pi
8d60: 70 65 22 2c 09 09 09 2f 2a 20 54 79 70 65 20 6e  pe",.../* Type n
8d70: 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 54 43 4c  ame. */.-    TCL
8d80: 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e  _CHANNEL_VERSION
8d90: 5f 32 2c 09 2f 2a 20 76 32 20 63 68 61 6e 6e 65  _2,./* v2 channe
8da0: 6c 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43 48  l */.+    TCL_CH
8db0: 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 2c  ANNEL_VERSION_4,
8dc0: 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20 2a  ./* v4 channel *
8dd0: 2f 0a 20 20 20 20 20 50 69 70 65 43 6c 6f 73 65  /.     PipeClose
8de0: 50 72 6f 63 2c 09 09 2f 2a 20 43 6c 6f 73 65 20  Proc,../* Close 
8df0: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 50 69  proc. */.     Pi
8e00: 70 65 49 6e 70 75 74 50 72 6f 63 2c 09 09 2f 2a  peInputProc,../*
8e10: 20 49 6e 70 75 74 20 70 72 6f 63 2e 20 2a 2f 0a   Input proc. */.
8e20: 20 20 20 20 20 50 69 70 65 4f 75 74 70 75 74 50       PipeOutputP
8e30: 72 6f 63 2c 09 09 2f 2a 20 4f 75 74 70 75 74 20  roc,../* Output 
8e40: 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d 38 35 2c  proc. */.@@ -85,
8e50: 36 20 2b 38 35 2c 38 20 40 40 0a 20 20 20 20 20  6 +85,8 @@.     
8e60: 50 69 70 65 42 6c 6f 63 6b 4d 6f 64 65 50 72 6f  PipeBlockModePro
8e70: 63 2c 09 09 2f 2a 20 53 65 74 20 62 6c 6f 63 6b  c,../* Set block
8e80: 69 6e 67 20 6f 72 20 6e 6f 6e 2d 62 6c 6f 63 6b  ing or non-block
8e90: 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a 20 20 20 20  ing mode.*/.    
8ea0: 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 66 6c 75 73   NULL,.../* flus
8eb0: 68 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20  h proc. */.     
8ec0: 4e 55 4c 4c 2c 09 09 09 2f 2a 20 68 61 6e 64 6c  NULL,.../* handl
8ed0: 65 72 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20  er proc. */.+   
8ee0: 20 4e 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20   NULL,          
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8f00: 77 69 64 65 20 73 65 65 6b 20 70 72 6f 63 20 2a  wide seek proc *
8f10: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 20 20 20  /.+    NULL,    
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f30: 20 20 20 2f 2a 20 74 68 72 65 61 64 20 61 63 74     /* thread act
8f40: 69 6f 6e 20 70 72 6f 63 20 2a 2f 0a 20 7d 3b 0a  ion proc */. };.
8f50: 20 0c 0a 20 2f 2a 0a 49 6e 64 65 78 3a 20 77 69   .. /*.Index: wi
8f60: 6e 2f 74 63 6c 57 69 6e 43 68 61 6e 2e 63 0a 3d  n/tclWinChan.c.=
8f70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
8fb0: 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76  ==.RCS file: /cv
8fc0: 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69  sroot/tcl/tcl/wi
8fd0: 6e 2f 74 63 6c 57 69 6e 43 68 61 6e 2e 63 2c 76  n/tclWinChan.c,v
8fe0: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69  .retrieving revi
8ff0: 73 69 6f 6e 20 31 2e 33 30 2e 32 2e 32 0a 64 69  sion 1.30.2.2.di
9000: 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e 33 30 2e  ff -w -u -r1.30.
9010: 32 2e 32 20 74 63 6c 57 69 6e 43 68 61 6e 2e 63  2.2 tclWinChan.c
9020: 0a 2d 2d 2d 20 77 69 6e 2f 74 63 6c 57 69 6e 43  .--- win/tclWinC
9030: 68 61 6e 2e 63 09 31 39 20 4a 61 6e 20 32 30 30  han.c.19 Jan 200
9040: 35 20 32 32 3a 30 39 3a 35 38 20 2d 30 30 30 30  5 22:09:58 -0000
9050: 09 31 2e 33 30 2e 32 2e 32 0a 2b 2b 2b 20 77 69  .1.30.2.2.+++ wi
9060: 6e 2f 74 63 6c 57 69 6e 43 68 61 6e 2e 63 09 32  n/tclWinChan.c.2
9070: 37 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39  7 Jan 2005 22:49
9080: 3a 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 39 38  :19 -0000.@@ -98
9090: 2c 36 20 2b 39 38 2c 38 20 40 40 0a 20 09 09 09  ,6 +98,8 @@. ...
90a0: 20 20 20 20 69 6e 74 20 66 6c 61 67 73 29 29 3b      int flags));
90b0: 0a 20 73 74 61 74 69 63 20 76 6f 69 64 09 09 46  . static void..F
90c0: 69 6c 65 57 61 74 63 68 50 72 6f 63 20 5f 41 4e  ileWatchProc _AN
90d0: 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74  SI_ARGS_((Client
90e0: 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74  Data instanceDat
90f0: 61 2c 0a 20 09 09 20 20 20 20 20 20 20 20 20 20  a,. ..          
9100: 20 20 69 6e 74 20 6d 61 73 6b 29 29 3b 0a 2b 73    int mask));.+s
9110: 74 61 74 69 63 20 76 6f 69 64 20 20 20 20 20 20  tatic void      
9120: 20 20 20 20 20 20 20 46 69 6c 65 54 68 72 65 61         FileThrea
9130: 64 41 63 74 69 6f 6e 50 72 6f 63 20 5f 41 4e 53  dActionProc _ANS
9140: 49 5f 41 52 47 53 5f 20 28 28 0a 2b 09 09 09 20  I_ARGS_ ((.+... 
9150: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73    ClientData ins
9160: 74 61 6e 63 65 44 61 74 61 2c 20 69 6e 74 20 61  tanceData, int a
9170: 63 74 69 6f 6e 29 29 3b 0a 20 0a 20 09 09 09 20  ction));. . ... 
9180: 20 20 20 0a 20 2f 2a 0a 40 40 20 2d 31 30 36 2c     . /*.@@ -106,
9190: 37 20 2b 31 30 38 2c 37 20 40 40 0a 20 0a 20 73  7 +108,7 @@. . s
91a0: 74 61 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e 65  tatic Tcl_Channe
91b0: 6c 54 79 70 65 20 66 69 6c 65 43 68 61 6e 6e 65  lType fileChanne
91c0: 6c 54 79 70 65 20 3d 20 7b 0a 20 20 20 20 20 22  lType = {.     "
91d0: 66 69 6c 65 22 2c 09 09 09 2f 2a 20 54 79 70 65  file",.../* Type
91e0: 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 54   name. */.-    T
91f0: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49  CL_CHANNEL_VERSI
9200: 4f 4e 5f 33 2c 09 2f 2a 20 76 33 20 63 68 61 6e  ON_3,./* v3 chan
9210: 6e 65 6c 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f  nel */.+    TCL_
9220: 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f  CHANNEL_VERSION_
9230: 34 2c 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c  4,./* v4 channel
9240: 20 2a 2f 0a 20 20 20 20 20 46 69 6c 65 43 6c 6f   */.     FileClo
9250: 73 65 50 72 6f 63 2c 09 09 2f 2a 20 43 6c 6f 73  seProc,../* Clos
9260: 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20  e proc. */.     
9270: 46 69 6c 65 49 6e 70 75 74 50 72 6f 63 2c 09 09  FileInputProc,..
9280: 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e 20 2a  /* Input proc. *
9290: 2f 0a 20 20 20 20 20 46 69 6c 65 4f 75 74 70 75  /.     FileOutpu
92a0: 74 50 72 6f 63 2c 09 09 2f 2a 20 4f 75 74 70 75  tProc,../* Outpu
92b0: 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d 31  t proc. */.@@ -1
92c0: 32 30 2c 36 20 2b 31 32 32 2c 37 20 40 40 0a 20  20,6 +122,7 @@. 
92d0: 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 66      NULL,.../* f
92e0: 6c 75 73 68 20 70 72 6f 63 2e 20 2a 2f 0a 20 20  lush proc. */.  
92f0: 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 68 61     NULL,.../* ha
9300: 6e 64 6c 65 72 20 70 72 6f 63 2e 20 2a 2f 0a 20  ndler proc. */. 
9310: 20 20 20 20 46 69 6c 65 57 69 64 65 53 65 65 6b      FileWideSeek
9320: 50 72 6f 63 2c 09 09 2f 2a 20 57 69 64 65 20 73  Proc,../* Wide s
9330: 65 65 6b 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20  eek proc. */.+  
9340: 20 20 46 69 6c 65 54 68 72 65 61 64 41 63 74 69    FileThreadActi
9350: 6f 6e 50 72 6f 63 2c 09 2f 2a 20 54 68 72 65 61  onProc,./* Threa
9360: 64 20 61 63 74 69 6f 6e 20 70 72 6f 63 2e 20 2a  d action proc. *
9370: 2f 0a 20 7d 3b 0a 20 0a 20 23 69 66 20 64 65 66  /. };. . #if def
9380: 69 6e 65 64 28 48 41 56 45 5f 4e 4f 5f 53 45 48  ined(HAVE_NO_SEH
9390: 29 20 26 26 20 64 65 66 69 6e 65 64 28 54 43 4c  ) && defined(TCL
93a0: 5f 4d 45 4d 5f 44 45 42 55 47 29 0a 40 40 20 2d  _MEM_DEBUG).@@ -
93b0: 34 33 36 2c 31 31 20 2b 34 33 39 2c 31 31 20 40  436,11 +439,11 @
93c0: 40 0a 20 09 69 66 20 28 69 6e 66 6f 50 74 72 20  @. .if (infoPtr 
93d0: 3d 3d 20 66 69 6c 65 49 6e 66 6f 50 74 72 29 20  == fileInfoPtr) 
93e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {.             /
93f0: 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *.              
9400: 2a 20 54 68 69 73 20 63 68 61 6e 6e 65 6c 20 65  * This channel e
9410: 78 69 73 74 73 20 6f 6e 20 74 68 65 20 74 68 72  xists on the thr
9420: 65 61 64 20 6c 6f 63 61 6c 20 6c 69 73 74 2e 20  ead local list. 
9430: 49 74 20 73 68 6f 75 6c 64 0a 2d 20 20 20 20 20  It should.-     
9440: 20 20 20 20 20 20 20 20 2a 20 68 61 76 65 20 62          * have b
9450: 65 65 6e 20 72 65 6d 6f 76 65 64 20 62 79 20 61  een removed by a
9460: 6e 20 65 61 72 6c 69 65 72 20 63 61 6c 6c 20 74  n earlier call t
9470: 6f 20 54 63 6c 70 43 75 74 46 69 6c 65 43 68 61  o TclpCutFileCha
9480: 6e 6e 65 6c 2c 0a 2b 20 20 20 20 20 20 20 20 20  nnel,.+         
9490: 20 20 20 20 2a 20 68 61 76 65 20 62 65 65 6e 20      * have been 
94a0: 72 65 6d 6f 76 65 64 20 62 79 20 61 6e 20 65 61  removed by an ea
94b0: 72 6c 69 65 72 20 54 68 72 65 61 64 20 41 63 74  rlier Thread Act
94c0: 69 6f 6e 20 63 61 6c 6c 2c 0a 20 20 20 20 20 20  ion call,.      
94d0: 20 20 20 20 20 20 20 20 2a 20 62 75 74 20 64 6f          * but do
94e0: 20 74 68 61 74 20 6e 6f 77 20 73 69 6e 63 65 20   that now since 
94f0: 6a 75 73 74 20 64 65 61 6c 6c 6f 63 61 74 69 6e  just deallocatin
9500: 67 20 66 69 6c 65 49 6e 66 6f 50 74 72 20 77 6f  g fileInfoPtr wo
9510: 75 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  uld.            
9520: 20 20 2a 20 6c 65 61 76 65 20 61 6e 20 64 65 61    * leave an dea
9530: 6c 6c 6f 63 61 74 65 64 20 70 6f 69 6e 74 65 72  llocated pointer
9540: 20 6f 6e 20 74 68 65 20 74 68 72 65 61 64 20 6c   on the thread l
9550: 6f 63 61 6c 20 6c 69 73 74 2e 0a 20 20 20 20 20  ocal list..     
9560: 20 20 20 20 20 20 20 20 20 2a 2f 0a 2d 20 20 20           */.-   
9570: 20 20 20 20 20 20 20 20 20 54 63 6c 70 43 75 74           TclpCut
9580: 46 69 6c 65 43 68 61 6e 6e 65 6c 28 66 69 6c 65  FileChannel(file
9590: 49 6e 66 6f 50 74 72 2d 3e 63 68 61 6e 6e 65 6c  InfoPtr->channel
95a0: 29 3b 0a 2b 09 20 20 20 20 46 69 6c 65 54 68 72  );.+.    FileThr
95b0: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 28 66 69  eadActionProc(fi
95c0: 6c 65 49 6e 66 6f 50 74 72 2c 54 43 4c 5f 43 48  leInfoPtr,TCL_CH
95d0: 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 52 45 4d  ANNEL_THREAD_REM
95e0: 4f 56 45 29 3b 0a 20 20 20 20 20 20 20 20 20 20  OVE);.          
95f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9600: 20 20 20 7d 0a 20 20 20 20 20 7d 0a 40 40 20 2d     }.     }.@@ -
9610: 31 33 31 39 2c 38 20 2b 31 33 32 32 2c 31 31 20  1319,8 +1322,11 
9620: 40 40 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20  @@.     }. .    
9630: 20 69 6e 66 6f 50 74 72 20 3d 20 28 46 69 6c 65   infoPtr = (File
9640: 49 6e 66 6f 20 2a 29 20 63 6b 61 6c 6c 6f 63 28  Info *) ckalloc(
9650: 28 75 6e 73 69 67 6e 65 64 29 20 73 69 7a 65 6f  (unsigned) sizeo
9660: 66 28 46 69 6c 65 49 6e 66 6f 29 29 3b 0a 2d 20  f(FileInfo));.- 
9670: 20 20 20 69 6e 66 6f 50 74 72 2d 3e 6e 65 78 74     infoPtr->next
9680: 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e 66 69  Ptr = tsdPtr->fi
9690: 72 73 74 46 69 6c 65 50 74 72 3b 0a 2d 20 20 20  rstFilePtr;.-   
96a0: 20 74 73 64 50 74 72 2d 3e 66 69 72 73 74 46 69   tsdPtr->firstFi
96b0: 6c 65 50 74 72 20 3d 20 69 6e 66 6f 50 74 72 3b  lePtr = infoPtr;
96c0: 0a 2b 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31  .+    /* TIP #21
96d0: 38 2e 20 52 65 6d 6f 76 65 64 20 74 68 65 20 63  8. Removed the c
96e0: 6f 64 65 20 69 6e 73 65 72 74 69 6e 67 20 74 68  ode inserting th
96f0: 65 20 6e 65 77 20 73 74 72 75 63 74 75 72 65 0a  e new structure.
9700: 2b 20 20 20 20 20 2a 20 69 6e 74 6f 20 74 68 65  +     * into the
9710: 20 67 6c 6f 62 61 6c 20 6c 69 73 74 2e 20 54 68   global list. Th
9720: 69 73 20 69 73 20 6e 6f 77 20 68 61 6e 64 6c 65  is is now handle
9730: 64 20 69 6e 20 74 68 65 20 74 68 72 65 61 64 0a  d in the thread.
9740: 2b 20 20 20 20 20 2a 20 61 63 74 69 6f 6e 20 63  +     * action c
9750: 61 6c 6c 62 61 63 6b 73 2c 20 61 6e 64 20 6f 6e  allbacks, and on
9760: 6c 79 20 74 68 65 72 65 2e 0a 2b 20 20 20 20 20  ly there..+     
9770: 2a 2f 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d  */.+    infoPtr-
9780: 3e 6e 65 78 74 50 74 72 20 3d 20 4e 55 4c 4c 3b  >nextPtr = NULL;
9790: 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 76  .     infoPtr->v
97a0: 61 6c 69 64 4d 61 73 6b 20 3d 20 70 65 72 6d 69  alidMask = permi
97b0: 73 73 69 6f 6e 73 3b 0a 20 20 20 20 20 69 6e 66  ssions;.     inf
97c0: 6f 50 74 72 2d 3e 77 61 74 63 68 4d 61 73 6b 20  oPtr->watchMask 
97d0: 3d 20 30 3b 0a 20 20 20 20 20 69 6e 66 6f 50 74  = 0;.     infoPt
97e0: 72 2d 3e 66 6c 61 67 73 20 3d 20 61 70 70 65 6e  r->flags = appen
97f0: 64 4d 6f 64 65 3b 0a 40 40 20 2d 31 33 38 39 2c  dMode;.@@ -1389,
9800: 31 30 20 2b 31 33 39 35 2c 39 20 40 40 0a 20 2f  10 +1395,9 @@. /
9810: 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.  *-----------
9820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a  -----------.  *.
9860: 2d 20 2a 20 54 63 6c 70 43 75 74 46 69 6c 65 43  - * TclpCutFileC
9870: 68 61 6e 6e 65 6c 20 2d 2d 0a 2b 20 2a 20 46 69  hannel --.+ * Fi
9880: 6c 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72  leThreadActionPr
9890: 6f 63 20 2d 2d 0a 20 20 2a 0a 2d 20 2a 09 52 65  oc --.  *.- *.Re
98a0: 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61 64 20  move any thread 
98b0: 6c 6f 63 61 6c 20 72 65 66 73 20 74 6f 20 74 68  local refs to th
98c0: 69 73 20 63 68 61 6e 6e 65 6c 2e 20 53 65 65 0a  is channel. See.
98d0: 2d 20 2a 09 54 63 6c 5f 43 75 74 43 68 61 6e 6e  - *.Tcl_CutChann
98e0: 65 6c 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f  el for more info
98f0: 2e 0a 2b 20 2a 09 49 6e 73 65 72 74 20 6f 72 20  ..+ *.Insert or 
9900: 72 65 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61  remove any threa
9910: 64 20 6c 6f 63 61 6c 20 72 65 66 73 20 74 6f 20  d local refs to 
9920: 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 20 20  this channel..  
9930: 2a 0a 20 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20  *.  * Results:. 
9940: 20 2a 09 4e 6f 6e 65 2e 0a 40 40 20 2d 31 34 30   *.None..@@ -140
9950: 33 2c 32 33 20 2b 31 34 30 38 2c 32 31 20 40 40  3,23 +1408,21 @@
9960: 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  *------------
9970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
99a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2f 0a  ----------.  */.
99b0: 20 0a 2d 76 6f 69 64 0a 2d 54 63 6c 70 43 75 74   .-void.-TclpCut
99c0: 46 69 6c 65 43 68 61 6e 6e 65 6c 28 63 68 61 6e  FileChannel(chan
99d0: 29 0a 2d 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e  ).-    Tcl_Chann
99e0: 65 6c 20 63 68 61 6e 3b 09 09 09 2f 2a 20 54 68  el chan;.../* Th
99f0: 65 20 63 68 61 6e 6e 65 6c 20 62 65 69 6e 67 20  e channel being 
9a00: 72 65 6d 6f 76 65 64 2e 20 4d 75 73 74 0a 2d 20  removed. Must.- 
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a30: 20 20 20 20 20 20 20 20 2a 20 6e 6f 74 20 62 65          * not be
9a40: 20 72 65 66 65 72 65 6e 63 65 64 20 69 6e 20 61   referenced in a
9a50: 6e 79 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20  ny.-            
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 69               * i
9a80: 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a 2b  nterpreter. */.+
9a90: 73 74 61 74 69 63 20 76 6f 69 64 0a 2b 46 69 6c  static void.+Fil
9aa0: 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f  eThreadActionPro
9ab0: 63 20 28 69 6e 73 74 61 6e 63 65 44 61 74 61 2c  c (instanceData,
9ac0: 20 61 63 74 69 6f 6e 29 0a 2b 20 20 20 20 20 43   action).+     C
9ad0: 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e  lientData instan
9ae0: 63 65 44 61 74 61 3b 0a 2b 20 20 20 20 20 69 6e  ceData;.+     in
9af0: 74 20 61 63 74 69 6f 6e 3b 0a 20 7b 0a 20 20 20  t action;. {.   
9b00: 20 20 54 68 72 65 61 64 53 70 65 63 69 66 69 63    ThreadSpecific
9b10: 44 61 74 61 20 2a 74 73 64 50 74 72 20 3d 20 54  Data *tsdPtr = T
9b20: 43 4c 5f 54 53 44 5f 49 4e 49 54 28 26 64 61 74  CL_TSD_INIT(&dat
9b30: 61 4b 65 79 29 3b 0a 2d 20 20 20 20 43 68 61 6e  aKey);.-    Chan
9b40: 6e 65 6c 20 2a 63 68 61 6e 50 74 72 20 3d 20 28  nel *chanPtr = (
9b50: 43 68 61 6e 6e 65 6c 20 2a 29 20 63 68 61 6e 3b  Channel *) chan;
9b60: 0a 2d 20 20 20 20 46 69 6c 65 49 6e 66 6f 20 2a  .-    FileInfo *
9b70: 69 6e 66 6f 50 74 72 3b 0a 2b 20 20 20 20 46 69  infoPtr;.+    Fi
9b80: 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 20  leInfo *infoPtr 
9b90: 3d 20 28 46 69 6c 65 49 6e 66 6f 20 2a 29 20 69  = (FileInfo *) i
9ba0: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 0a 2b  nstanceData;.+.+
9bb0: 20 20 20 20 69 66 20 28 61 63 74 69 6f 6e 20 3d      if (action =
9bc0: 3d 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 48  = TCL_CHANNEL_TH
9bd0: 52 45 41 44 5f 49 4e 53 45 52 54 29 20 7b 0a 2b  READ_INSERT) {.+
9be0: 20 20 20 20 20 20 20 20 69 6e 66 6f 50 74 72 2d          infoPtr-
9bf0: 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64 50 74  >nextPtr = tsdPt
9c00: 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 72 3b  r->firstFilePtr;
9c10: 0a 2b 09 74 73 64 50 74 72 2d 3e 66 69 72 73 74  .+.tsdPtr->first
9c20: 46 69 6c 65 50 74 72 20 3d 20 69 6e 66 6f 50 74  FilePtr = infoPt
9c30: 72 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b  r;.+    } else {
9c40: 0a 20 20 20 20 20 46 69 6c 65 49 6e 66 6f 20 2a  .     FileInfo *
9c50: 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a 20 20 20  *nextPtrPtr;.   
9c60: 20 20 69 6e 74 20 72 65 6d 6f 76 65 64 20 3d 20    int removed = 
9c70: 30 3b 0a 20 0a 2d 20 20 20 20 69 66 20 28 63 68  0;. .-    if (ch
9c80: 61 6e 50 74 72 2d 3e 74 79 70 65 50 74 72 20 21  anPtr->typePtr !
9c90: 3d 20 26 66 69 6c 65 43 68 61 6e 6e 65 6c 54 79  = &fileChannelTy
9ca0: 70 65 29 0a 2d 20 20 20 20 20 20 20 20 72 65 74  pe).-        ret
9cb0: 75 72 6e 3b 0a 2d 0a 2d 20 20 20 20 69 6e 66 6f  urn;.-.-    info
9cc0: 50 74 72 20 3d 20 28 46 69 6c 65 49 6e 66 6f 20  Ptr = (FileInfo 
9cd0: 2a 29 20 63 68 61 6e 50 74 72 2d 3e 69 6e 73 74  *) chanPtr->inst
9ce0: 61 6e 63 65 44 61 74 61 3b 0a 2d 0a 20 20 20 20  anceData;.-.    
9cf0: 20 66 6f 72 20 28 6e 65 78 74 50 74 72 50 74 72   for (nextPtrPtr
9d00: 20 3d 20 26 28 74 73 64 50 74 72 2d 3e 66 69 72   = &(tsdPtr->fir
9d10: 73 74 46 69 6c 65 50 74 72 29 3b 20 28 2a 6e 65  stFilePtr); (*ne
9d20: 78 74 50 74 72 50 74 72 29 20 21 3d 20 4e 55 4c  xtPtrPtr) != NUL
9d30: 4c 3b 0a 20 09 20 6e 65 78 74 50 74 72 50 74 72  L;. . nextPtrPtr
9d40: 20 3d 20 26 28 28 2a 6e 65 78 74 50 74 72 50 74   = &((*nextPtrPt
9d50: 72 29 2d 3e 6e 65 78 74 50 74 72 29 29 20 7b 0a  r)->nextPtr)) {.
9d60: 20 09 69 66 20 28 28 2a 6e 65 78 74 50 74 72 50   .if ((*nextPtrP
9d70: 74 72 29 20 3d 3d 20 69 6e 66 6f 50 74 72 29 20  tr) == infoPtr) 
9d80: 7b 0a 40 40 20 2d 31 34 33 35 2c 34 33 20 2b 31  {.@@ -1435,43 +1
9d90: 34 33 38 2c 38 20 40 40 0a 20 20 20 20 20 20 2a  438,8 @@.      *
9da0: 20 6c 6f 63 61 6c 20 64 61 74 61 20 69 6e 20 65   local data in e
9db0: 61 63 68 20 74 68 72 65 61 64 2e 0a 20 20 20 20  ach thread..    
9dc0: 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 69 66 20 28    */. .-    if (
9dd0: 21 72 65 6d 6f 76 65 64 29 0a 2b 09 69 66 20 28  !removed).+.if (
9de0: 21 72 65 6d 6f 76 65 64 29 20 7b 0a 20 20 20 20  !removed) {.    
9df0: 20 20 20 20 20 70 61 6e 69 63 28 22 66 69 6c 65       panic("file
9e00: 20 69 6e 66 6f 20 70 74 72 20 6e 6f 74 20 6f 6e   info ptr not on
9e10: 20 74 68 72 65 61 64 20 63 68 61 6e 6e 65 6c 20   thread channel 
9e20: 6c 69 73 74 22 29 3b 0a 2d 0a 20 7d 0a 2d 0c 0a  list");.-. }.-..
9e30: 2d 2f 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  -/*.- *---------
9e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20  -------------.- 
9e80: 2a 0a 2d 20 2a 20 54 63 6c 70 53 70 6c 69 63 65  *.- * TclpSplice
9e90: 46 69 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2d  FileChannel --.-
9ea0: 20 2a 0a 2d 20 2a 09 49 6e 73 65 72 74 20 74 68   *.- *.Insert th
9eb0: 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 20 66  read local ref f
9ec0: 6f 72 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e  or this channel.
9ed0: 0a 2d 20 2a 09 54 63 6c 5f 53 70 6c 69 63 65 43  .- *.Tcl_SpliceC
9ee0: 68 61 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 20  hannel for more 
9ef0: 69 6e 66 6f 2e 0a 2d 20 2a 0a 2d 20 2a 20 52 65  info..- *.- * Re
9f00: 73 75 6c 74 73 3a 0a 2d 20 2a 09 4e 6f 6e 65 2e  sults:.- *.None.
9f10: 0a 2d 20 2a 0a 2d 20 2a 20 53 69 64 65 20 65 66  .- *.- * Side ef
9f20: 66 65 63 74 73 3a 0a 2d 20 2a 09 43 68 61 6e 67  fects:.- *.Chang
9f30: 65 73 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20  es thread local 
9f40: 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 20 63 68  list of valid ch
9f50: 61 6e 6e 65 6c 73 2e 0a 2d 20 2a 0a 2d 20 2a 2d  annels..- *.- *-
9f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9fa0: 2d 2d 2d 2d 2d 0a 2d 20 2a 2f 0a 2d 0a 2d 76 6f  -----.- */.-.-vo
9fb0: 69 64 0a 2d 54 63 6c 70 53 70 6c 69 63 65 46 69  id.-TclpSpliceFi
9fc0: 6c 65 43 68 61 6e 6e 65 6c 28 63 68 61 6e 29 0a  leChannel(chan).
9fd0: 2d 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c  -    Tcl_Channel
9fe0: 20 63 68 61 6e 3b 09 09 09 2f 2a 20 54 68 65 20   chan;.../* The 
9ff0: 63 68 61 6e 6e 65 6c 20 62 65 69 6e 67 20 72 65  channel being re
a000: 6d 6f 76 65 64 2e 20 4d 75 73 74 0a 2d 20 20 20  moved. Must.-   
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a030: 20 20 20 20 20 20 2a 20 6e 6f 74 20 62 65 20 72        * not be r
a040: 65 66 65 72 65 6e 63 65 64 20 69 6e 20 61 6e 79  eferenced in any
a050: 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .-              
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a070: 20 20 20 20 20 20 20 20 20 20 20 2a 20 69 6e 74             * int
a080: 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a 2d 7b 0a  erpreter. */.-{.
a090: 2d 20 20 20 20 54 68 72 65 61 64 53 70 65 63 69  -    ThreadSpeci
a0a0: 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 72 20  ficData *tsdPtr 
a0b0: 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54 28 26  = TCL_TSD_INIT(&
a0c0: 64 61 74 61 4b 65 79 29 3b 0a 2d 20 20 20 20 43  dataKey);.-    C
a0d0: 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50 74 72 20  hannel *chanPtr 
a0e0: 3d 20 28 43 68 61 6e 6e 65 6c 20 2a 29 20 63 68  = (Channel *) ch
a0f0: 61 6e 3b 0a 2d 20 20 20 20 46 69 6c 65 49 6e 66  an;.-    FileInf
a100: 6f 20 2a 69 6e 66 6f 50 74 72 3b 0a 2d 0a 2d 20  o *infoPtr;.-.- 
a110: 20 20 20 69 66 20 28 63 68 61 6e 50 74 72 2d 3e     if (chanPtr->
a120: 74 79 70 65 50 74 72 20 21 3d 20 26 66 69 6c 65  typePtr != &file
a130: 43 68 61 6e 6e 65 6c 54 79 70 65 29 0a 2d 20 20  ChannelType).-  
a140: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 2d 0a        return;.-.
a150: 2d 20 20 20 20 69 6e 66 6f 50 74 72 20 3d 20 28  -    infoPtr = (
a160: 46 69 6c 65 49 6e 66 6f 20 2a 29 20 63 68 61 6e  FileInfo *) chan
a170: 50 74 72 2d 3e 69 6e 73 74 61 6e 63 65 44 61 74  Ptr->instanceDat
a180: 61 3b 0a 2d 0a 2d 20 20 20 20 69 6e 66 6f 50 74  a;.-.-    infoPt
a190: 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64  r->nextPtr = tsd
a1a0: 50 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74  Ptr->firstFilePt
a1b0: 72 3b 0a 2d 20 20 20 20 74 73 64 50 74 72 2d 3e  r;.-    tsdPtr->
a1c0: 66 69 72 73 74 46 69 6c 65 50 74 72 20 3d 20 69  firstFilePtr = i
a1d0: 6e 66 6f 50 74 72 3b 0a 2b 20 20 20 20 7d 0a 20  nfoPtr;.+    }. 
a1e0: 7d 0a 49 6e 64 65 78 3a 20 77 69 6e 2f 74 63 6c  }.Index: win/tcl
a1f0: 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 0a 3d 3d 3d  WinConsole.c.===
a200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
a240: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
a250: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69 6e 2f  oot/tcl/tcl/win/
a260: 74 63 6c 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 2c  tclWinConsole.c,
a270: 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76  v.retrieving rev
a280: 69 73 69 6f 6e 20 31 2e 31 31 0a 64 69 66 66 20  ision 1.11.diff 
a290: 2d 77 20 2d 75 20 2d 72 31 2e 31 31 20 74 63 6c  -w -u -r1.11 tcl
a2a0: 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 0a 2d 2d 2d  WinConsole.c.---
a2b0: 20 77 69 6e 2f 74 63 6c 57 69 6e 43 6f 6e 73 6f   win/tclWinConso
a2c0: 6c 65 2e 63 09 32 36 20 4e 6f 76 20 32 30 30 32  le.c.26 Nov 2002
a2d0: 20 32 32 3a 34 31 3a 35 38 20 2d 30 30 30 30 09   22:41:58 -0000.
a2e0: 31 2e 31 31 0a 2b 2b 2b 20 77 69 6e 2f 74 63 6c  1.11.+++ win/tcl
a2f0: 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 09 32 37 20  WinConsole.c.27 
a300: 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a 31  Jan 2005 22:49:1
a310: 39 20 2d 30 30 30 30 0a 40 40 20 2d 31 34 38 2c  9 -0000.@@ -148,
a320: 37 20 2b 31 34 38 2c 37 20 40 40 0a 20 73 74 61  7 +148,7 @@. sta
a330: 74 69 63 20 76 6f 69 64 09 09 43 6f 6e 73 6f 6c  tic void..Consol
a340: 65 45 78 69 74 48 61 6e 64 6c 65 72 28 43 6c 69  eExitHandler(Cli
a350: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
a360: 74 61 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74  ta);. static int
a370: 09 09 43 6f 6e 73 6f 6c 65 47 65 74 48 61 6e 64  ..ConsoleGetHand
a380: 6c 65 50 72 6f 63 28 43 6c 69 65 6e 74 44 61 74  leProc(ClientDat
a390: 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 0a  a instanceData,.
a3a0: 20 09 09 09 20 20 20 20 69 6e 74 20 64 69 72 65   ...    int dire
a3b0: 63 74 69 6f 6e 2c 20 43 6c 69 65 6e 74 44 61 74  ction, ClientDat
a3c0: 61 20 2a 68 61 6e 64 6c 65 50 74 72 29 3b 0a 2d  a *handlePtr);.-
a3d0: 73 74 61 74 69 63 20 54 68 72 65 61 64 53 70 65  static ThreadSpe
a3e0: 63 69 66 69 63 44 61 74 61 20 2a 43 6f 6e 73 6f  cificData *Conso
a3f0: 6c 65 49 6e 69 74 28 76 6f 69 64 29 3b 0a 2b 73  leInit(void);.+s
a400: 74 61 74 69 63 20 76 6f 69 64 20 20 20 20 20 20  tatic void      
a410: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 49 6e         ConsoleIn
a420: 69 74 28 76 6f 69 64 29 3b 0a 20 73 74 61 74 69  it(void);. stati
a430: 63 20 69 6e 74 09 09 43 6f 6e 73 6f 6c 65 49 6e  c int..ConsoleIn
a440: 70 75 74 50 72 6f 63 28 43 6c 69 65 6e 74 44 61  putProc(ClientDa
a450: 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c  ta instanceData,
a460: 20 63 68 61 72 20 2a 62 75 66 2c 0a 20 09 09 09   char *buf,. ...
a470: 20 20 20 20 69 6e 74 20 74 6f 52 65 61 64 2c 20      int toRead, 
a480: 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 29 3b  int *errorCode);
a490: 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 43 6f  . static int..Co
a4a0: 6e 73 6f 6c 65 4f 75 74 70 75 74 50 72 6f 63 28  nsoleOutputProc(
a4b0: 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61  ClientData insta
a4c0: 6e 63 65 44 61 74 61 2c 0a 40 40 20 2d 31 36 30  nceData,.@@ -160
a4d0: 2c 36 20 2b 31 36 30 2c 39 20 40 40 0a 20 73 74  ,6 +160,9 @@. st
a4e0: 61 74 69 63 20 76 6f 69 64 09 09 50 72 6f 63 45  atic void..ProcE
a4f0: 78 69 74 48 61 6e 64 6c 65 72 28 43 6c 69 65 6e  xitHandler(Clien
a500: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
a510: 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09  );. static int..
a520: 57 61 69 74 46 6f 72 52 65 61 64 28 43 6f 6e 73  WaitForRead(Cons
a530: 6f 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72  oleInfo *infoPtr
a540: 2c 20 69 6e 74 20 62 6c 6f 63 6b 69 6e 67 29 3b  , int blocking);
a550: 0a 20 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 20  . .+static void 
a560: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
a570: 6f 6c 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50  oleThreadActionP
a580: 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 20  roc _ANSI_ARGS_ 
a590: 28 28 0a 2b 09 09 09 20 20 20 43 6c 69 65 6e 74  ((.+...   Client
a5a0: 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74  Data instanceDat
a5b0: 61 2c 20 69 6e 74 20 61 63 74 69 6f 6e 29 29 3b  a, int action));
a5c0: 0a 2b 0a 20 2f 2a 0a 20 20 2a 20 54 68 69 73 20  .+. /*.  * This 
a5d0: 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
a5e0: 62 65 73 20 74 68 65 20 63 68 61 6e 6e 65 6c 20  bes the channel 
a5f0: 74 79 70 65 20 73 74 72 75 63 74 75 72 65 20 66  type structure f
a600: 6f 72 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 6f  or command conso
a610: 6c 65 0a 20 20 2a 20 62 61 73 65 64 20 49 4f 2e  le.  * based IO.
a620: 0a 40 40 20 2d 31 36 37 2c 37 20 2b 31 37 30 2c  .@@ -167,7 +170,
a630: 37 20 40 40 0a 20 0a 20 73 74 61 74 69 63 20 54  7 @@. . static T
a640: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 63  cl_ChannelType c
a650: 6f 6e 73 6f 6c 65 43 68 61 6e 6e 65 6c 54 79 70  onsoleChannelTyp
a660: 65 20 3d 20 7b 0a 20 20 20 20 20 22 63 6f 6e 73  e = {.     "cons
a670: 6f 6c 65 22 2c 09 09 09 2f 2a 20 54 79 70 65 20  ole",.../* Type 
a680: 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 54 43  name. */.-    TC
a690: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f  L_CHANNEL_VERSIO
a6a0: 4e 5f 32 2c 09 2f 2a 20 76 32 20 63 68 61 6e 6e  N_2,./* v2 chann
a6b0: 65 6c 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43  el */.+    TCL_C
a6c0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34  HANNEL_VERSION_4
a6d0: 2c 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20  ,./* v4 channel 
a6e0: 2a 2f 0a 20 20 20 20 20 43 6f 6e 73 6f 6c 65 43  */.     ConsoleC
a6f0: 6c 6f 73 65 50 72 6f 63 2c 09 09 2f 2a 20 43 6c  loseProc,../* Cl
a700: 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20  ose proc. */.   
a710: 20 20 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 50 72    ConsoleInputPr
a720: 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20 70 72  oc,../* Input pr
a730: 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 43 6f 6e 73  oc. */.     Cons
a740: 6f 6c 65 4f 75 74 70 75 74 50 72 6f 63 2c 09 09  oleOutputProc,..
a750: 2f 2a 20 4f 75 74 70 75 74 20 70 72 6f 63 2e 20  /* Output proc. 
a760: 2a 2f 0a 40 40 20 2d 31 38 30 2c 36 20 2b 31 38  */.@@ -180,6 +18
a770: 33 2c 38 20 40 40 0a 20 20 20 20 20 43 6f 6e 73  3,8 @@.     Cons
a780: 6f 6c 65 42 6c 6f 63 6b 4d 6f 64 65 50 72 6f 63  oleBlockModeProc
a790: 2c 09 2f 2a 20 53 65 74 20 62 6c 6f 63 6b 69 6e  ,./* Set blockin
a7a0: 67 20 6f 72 20 6e 6f 6e 2d 62 6c 6f 63 6b 69 6e  g or non-blockin
a7b0: 67 20 6d 6f 64 65 2e 2a 2f 0a 20 20 20 20 20 4e  g mode.*/.     N
a7c0: 55 4c 4c 2c 09 09 09 2f 2a 20 66 6c 75 73 68 20  ULL,.../* flush 
a7d0: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 4e 55  proc. */.     NU
a7e0: 4c 4c 2c 09 09 09 2f 2a 20 68 61 6e 64 6c 65 72  LL,.../* handler
a7f0: 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e   proc. */.+    N
a800: 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 20 20  ULL,            
a810: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 77 69             /* wi
a820: 64 65 20 73 65 65 6b 20 70 72 6f 63 20 2a 2f 0a  de seek proc */.
a830: 2b 20 20 20 20 43 6f 6e 73 6f 6c 65 54 68 72 65  +    ConsoleThre
a840: 61 64 41 63 74 69 6f 6e 50 72 6f 63 2c 20 20 20  adActionProc,   
a850: 20 2f 2a 20 74 68 72 65 61 64 20 61 63 74 69 6f   /* thread actio
a860: 6e 20 70 72 6f 63 20 2a 2f 0a 20 7d 3b 0a 20 0c  n proc */. };. .
a870: 0a 20 2f 2a 0a 40 40 20 2d 31 39 38 2c 37 20 2b  . /*.@@ -198,7 +
a880: 32 30 33 2c 37 20 40 40 0a 20 20 2a 2d 2d 2d 2d  203,7 @@.  *----
a890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a8a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a8b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a8c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a8d0: 2d 2d 0a 20 20 2a 2f 0a 20 0a 2d 73 74 61 74 69  --.  */. .-stati
a8e0: 63 20 54 68 72 65 61 64 53 70 65 63 69 66 69 63  c ThreadSpecific
a8f0: 44 61 74 61 20 2a 0a 2b 73 74 61 74 69 63 20 76  Data *.+static v
a900: 6f 69 64 0a 20 43 6f 6e 73 6f 6c 65 49 6e 69 74  oid. ConsoleInit
a910: 28 29 0a 20 7b 0a 20 20 20 20 20 54 68 72 65 61  (). {.     Threa
a920: 64 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 74  dSpecificData *t
a930: 73 64 50 74 72 3b 0a 40 40 20 2d 32 32 34 2c 37  sdPtr;.@@ -224,7
a940: 20 2b 32 32 39 2c 36 20 40 40 0a 20 09 54 63 6c   +229,6 @@. .Tcl
a950: 5f 43 72 65 61 74 65 45 76 65 6e 74 53 6f 75 72  _CreateEventSour
a960: 63 65 28 43 6f 6e 73 6f 6c 65 53 65 74 75 70 50  ce(ConsoleSetupP
a970: 72 6f 63 2c 20 43 6f 6e 73 6f 6c 65 43 68 65 63  roc, ConsoleChec
a980: 6b 50 72 6f 63 2c 20 4e 55 4c 4c 29 3b 0a 20 09  kProc, NULL);. .
a990: 54 63 6c 5f 43 72 65 61 74 65 54 68 72 65 61 64  Tcl_CreateThread
a9a0: 45 78 69 74 48 61 6e 64 6c 65 72 28 43 6f 6e 73  ExitHandler(Cons
a9b0: 6f 6c 65 45 78 69 74 48 61 6e 64 6c 65 72 2c 20  oleExitHandler, 
a9c0: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 7d 0a 2d 20  NULL);.     }.- 
a9d0: 20 20 20 72 65 74 75 72 6e 20 74 73 64 50 74 72     return tsdPtr
a9e0: 3b 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d  ;. }. .. /*.@@ -
a9f0: 31 31 37 30 2c 37 20 2b 31 31 37 34 2c 31 30 20  1170,7 +1174,10 
aa00: 40 40 0a 20 09 20 2a 2f 0a 20 0a 20 09 54 63 6c  @@. . */. . .Tcl
aa10: 5f 4d 75 74 65 78 4c 6f 63 6b 28 26 63 6f 6e 73  _MutexLock(&cons
aa20: 6f 6c 65 4d 75 74 65 78 29 3b 0a 2b 09 69 66 20  oleMutex);.+.if 
aa30: 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64  (infoPtr->thread
aa40: 49 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09  Id != NULL) {.+.
aa50: 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 2e      /* TIP #218.
aa60: 20 57 68 65 6e 20 69 6e 20 66 6c 69 67 68 74 20   When in flight 
aa70: 69 67 6e 6f 72 65 20 74 68 65 20 65 76 65 6e 74  ignore the event
aa80: 2c 20 6e 6f 20 6f 6e 65 20 77 69 6c 6c 20 72 65  , no one will re
aa90: 63 65 69 76 65 20 69 74 20 61 6e 79 77 61 79 20  ceive it anyway 
aaa0: 2a 2f 0a 20 09 54 63 6c 5f 54 68 72 65 61 64 41  */. .Tcl_ThreadA
aab0: 6c 65 72 74 28 69 6e 66 6f 50 74 72 2d 3e 74 68  lert(infoPtr->th
aac0: 72 65 61 64 49 64 29 3b 0a 2b 09 7d 0a 20 09 54  readId);.+.}. .T
aad0: 63 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26  cl_MutexUnlock(&
aae0: 63 6f 6e 73 6f 6c 65 4d 75 74 65 78 29 3b 0a 20  consoleMutex);. 
aaf0: 20 20 20 20 7d 0a 20 0a 40 40 20 2d 31 32 35 36      }. .@@ -1256
ab00: 2c 37 20 2b 31 32 36 33 2c 31 30 20 40 40 0a 20  ,7 +1263,10 @@. 
ab10: 09 20 2a 2f 0a 20 0a 20 09 54 63 6c 5f 4d 75 74  . */. . .Tcl_Mut
ab20: 65 78 4c 6f 63 6b 28 26 63 6f 6e 73 6f 6c 65 4d  exLock(&consoleM
ab30: 75 74 65 78 29 3b 0a 2b 09 69 66 20 28 69 6e 66  utex);.+.if (inf
ab40: 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 64 20 21  oPtr->threadId !
ab50: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20  = NULL) {.+.    
ab60: 2f 2a 20 54 49 50 20 23 32 31 38 2e 20 57 68 65  /* TIP #218. Whe
ab70: 6e 20 69 6e 20 66 6c 69 67 68 74 20 69 67 6e 6f  n in flight igno
ab80: 72 65 20 74 68 65 20 65 76 65 6e 74 2c 20 6e 6f  re the event, no
ab90: 20 6f 6e 65 20 77 69 6c 6c 20 72 65 63 65 69 76   one will receiv
aba0: 65 20 69 74 20 61 6e 79 77 61 79 20 2a 2f 0a 20  e it anyway */. 
abb0: 09 54 63 6c 5f 54 68 72 65 61 64 41 6c 65 72 74  .Tcl_ThreadAlert
abc0: 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64  (infoPtr->thread
abd0: 49 64 29 3b 0a 2b 09 7d 0a 20 09 54 63 6c 5f 4d  Id);.+.}. .Tcl_M
abe0: 75 74 65 78 55 6e 6c 6f 63 6b 28 26 63 6f 6e 73  utexUnlock(&cons
abf0: 6f 6c 65 4d 75 74 65 78 29 3b 0a 20 20 20 20 20  oleMutex);.     
ac00: 7d 0a 20 0a 40 40 20 2d 31 32 39 31 2c 31 30 20  }. .@@ -1291,10 
ac10: 2b 31 33 30 31 2c 39 20 40 40 0a 20 7b 0a 20 20  +1301,9 @@. {.  
ac20: 20 20 20 63 68 61 72 20 65 6e 63 6f 64 69 6e 67     char encoding
ac30: 5b 34 20 2b 20 54 43 4c 5f 49 4e 54 45 47 45 52  [4 + TCL_INTEGER
ac40: 5f 53 50 41 43 45 5d 3b 0a 20 20 20 20 20 43 6f  _SPACE];.     Co
ac50: 6e 73 6f 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f 50  nsoleInfo *infoP
ac60: 74 72 3b 0a 2d 20 20 20 20 54 68 72 65 61 64 53  tr;.-    ThreadS
ac70: 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 73 64  pecificData *tsd
ac80: 50 74 72 3b 0a 20 20 20 20 20 44 57 4f 52 44 20  Ptr;.     DWORD 
ac90: 69 64 2c 20 6d 6f 64 65 73 3b 0a 20 0a 2d 20 20  id, modes;. .-  
aca0: 20 20 74 73 64 50 74 72 20 3d 20 43 6f 6e 73 6f    tsdPtr = Conso
acb0: 6c 65 49 6e 69 74 28 29 3b 0a 2b 20 20 20 20 43  leInit();.+    C
acc0: 6f 6e 73 6f 6c 65 49 6e 69 74 28 29 3b 0a 20 0a  onsoleInit();. .
acd0: 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20       /*.      * 
ace0: 53 65 65 20 69 66 20 61 20 63 68 61 6e 6e 65 6c  See if a channel
acf0: 20 77 69 74 68 20 74 68 69 73 20 68 61 6e 64 6c   with this handl
ad00: 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  e already exists
ad10: 2e 0a 40 40 20 2d 31 33 30 35 2c 39 20 2b 31 33  ..@@ -1305,9 +13
ad20: 31 34 2c 31 32 20 40 40 0a 20 0a 20 20 20 20 20  14,12 @@. .     
ad30: 69 6e 66 6f 50 74 72 2d 3e 76 61 6c 69 64 4d 61  infoPtr->validMa
ad40: 73 6b 20 3d 20 70 65 72 6d 69 73 73 69 6f 6e 73  sk = permissions
ad50: 3b 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e  ;.     infoPtr->
ad60: 68 61 6e 64 6c 65 20 3d 20 68 61 6e 64 6c 65 3b  handle = handle;
ad70: 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 63  .+    infoPtr->c
ad80: 68 61 6e 6e 65 6c 20 3d 20 28 54 63 6c 5f 43 68  hannel = (Tcl_Ch
ad90: 61 6e 6e 65 6c 29 20 4e 55 4c 4c 3b 0a 20 0a 20  annel) NULL;. . 
ada0: 20 20 20 20 77 73 70 72 69 6e 74 66 41 28 65 6e      wsprintfA(en
adb0: 63 6f 64 69 6e 67 2c 20 22 63 70 25 64 22 2c 20  coding, "cp%d", 
adc0: 47 65 74 43 6f 6e 73 6f 6c 65 43 50 28 29 29 3b  GetConsoleCP());
add0: 0a 20 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d  . .+    infoPtr-
ade0: 3e 74 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f  >threadId = Tcl_
adf0: 47 65 74 43 75 72 72 65 6e 74 54 68 72 65 61 64  GetCurrentThread
ae00: 28 29 3b 0a 2b 0a 20 20 20 20 20 2f 2a 0a 20 20  ();.+.     /*.  
ae10: 20 20 20 20 2a 20 55 73 65 20 74 68 65 20 70 6f      * Use the po
ae20: 69 6e 74 65 72 20 66 6f 72 20 74 68 65 20 6e 61  inter for the na
ae30: 6d 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  me of the result
ae40: 20 63 68 61 6e 6e 65 6c 2e 0a 20 20 20 20 20 20   channel..      
ae50: 2a 20 54 68 69 73 20 6b 65 65 70 73 20 74 68 65  * This keeps the
ae60: 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 73 20 75   channel names u
ae70: 6e 69 71 75 65 2c 20 73 69 6e 63 65 20 73 6f 6d  nique, since som
ae80: 65 20 6d 61 79 20 73 68 61 72 65 0a 40 40 20 2d  e may share.@@ -
ae90: 31 33 31 39 2c 38 20 2b 31 33 33 31 2c 36 20 40  1319,8 +1331,6 @
aea0: 40 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e  @.     infoPtr->
aeb0: 63 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 43 72  channel = Tcl_Cr
aec0: 65 61 74 65 43 68 61 6e 6e 65 6c 28 26 63 6f 6e  eateChannel(&con
aed0: 73 6f 6c 65 43 68 61 6e 6e 65 6c 54 79 70 65 2c  soleChannelType,
aee0: 20 63 68 61 6e 6e 65 6c 4e 61 6d 65 2c 0a 20 20   channelName,.  
aef0: 20 20 20 20 20 20 20 20 20 20 20 28 43 6c 69 65             (Clie
af00: 6e 74 44 61 74 61 29 20 69 6e 66 6f 50 74 72 2c  ntData) infoPtr,
af10: 20 70 65 72 6d 69 73 73 69 6f 6e 73 29 3b 0a 20   permissions);. 
af20: 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 74  .-    infoPtr->t
af30: 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f 47 65  hreadId = Tcl_Ge
af40: 74 43 75 72 72 65 6e 74 54 68 72 65 61 64 28 29  tCurrentThread()
af50: 3b 0a 2d 0a 20 20 20 20 20 69 66 20 28 70 65 72  ;.-.     if (per
af60: 6d 69 73 73 69 6f 6e 73 20 26 20 54 43 4c 5f 52  missions & TCL_R
af70: 45 41 44 41 42 4c 45 29 20 7b 0a 20 09 2f 2a 0a  EADABLE) {. ./*.
af80: 20 09 20 2a 20 4d 61 6b 65 20 73 75 72 65 20 74   . * Make sure t
af90: 68 65 20 63 6f 6e 73 6f 6c 65 20 69 6e 70 75 74  he console input
afa0: 20 62 75 66 66 65 72 20 69 73 20 72 65 61 64 79   buffer is ready
afb0: 20 66 6f 72 20 6f 6e 6c 79 20 63 68 61 72 61 63   for only charac
afc0: 74 65 72 0a 40 40 20 2d 31 33 36 31 2c 33 20 2b  ter.@@ -1361,3 +
afd0: 31 33 37 31 2c 35 31 20 40 40 0a 20 0a 20 20 20  1371,51 @@. .   
afe0: 20 20 72 65 74 75 72 6e 20 69 6e 66 6f 50 74 72    return infoPtr
aff0: 2d 3e 63 68 61 6e 6e 65 6c 3b 0a 20 7d 0a 2b 0c  ->channel;. }.+.
b000: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .+/*.+ *--------
b010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b  --------------.+
b050: 20 2a 0a 2b 20 2a 20 43 6f 6e 73 6f 6c 65 54 68   *.+ * ConsoleTh
b060: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2d  readActionProc -
b070: 2d 0a 2b 20 2a 0a 2b 20 2a 09 49 6e 73 65 72 74  -.+ *.+ *.Insert
b080: 20 6f 72 20 72 65 6d 6f 76 65 20 61 6e 79 20 74   or remove any t
b090: 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 73  hread local refs
b0a0: 20 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 6c   to this channel
b0b0: 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74  ..+ *.+ * Result
b0c0: 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a  s:.+ *.None..+ *
b0d0: 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  .+ * Side effect
b0e0: 73 3a 0a 2b 20 2a 09 43 68 61 6e 67 65 73 20 74  s:.+ *.Changes t
b0f0: 68 72 65 61 64 20 6c 6f 63 61 6c 20 6c 69 73 74  hread local list
b100: 20 6f 66 20 76 61 6c 69 64 20 63 68 61 6e 6e 65   of valid channe
b110: 6c 73 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d  ls..+ *.+ *-----
b120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b160: 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63  -.+ */.+.+static
b170: 20 76 6f 69 64 0a 2b 43 6f 6e 73 6f 6c 65 54 68   void.+ConsoleTh
b180: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 28  readActionProc (
b190: 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 61 63  instanceData, ac
b1a0: 74 69 6f 6e 29 0a 2b 20 20 20 20 20 43 6c 69 65  tion).+     Clie
b1b0: 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44  ntData instanceD
b1c0: 61 74 61 3b 0a 2b 20 20 20 20 20 69 6e 74 20 61  ata;.+     int a
b1d0: 63 74 69 6f 6e 3b 0a 2b 7b 0a 2b 20 20 20 20 43  ction;.+{.+    C
b1e0: 6f 6e 73 6f 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f  onsoleInfo *info
b1f0: 50 74 72 20 3d 20 28 43 6f 6e 73 6f 6c 65 49 6e  Ptr = (ConsoleIn
b200: 66 6f 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 61  fo *) instanceDa
b210: 74 61 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 20 57 65  ta;.+.+    /* We
b220: 20 64 6f 20 6e 6f 74 20 61 63 63 65 73 73 20 66   do not access f
b230: 69 72 73 74 43 6f 6e 73 6f 6c 65 50 74 72 20 69  irstConsolePtr i
b240: 6e 20 74 68 65 20 74 68 72 65 61 64 20 73 74 72  n the thread str
b250: 75 63 74 75 72 65 73 2e 20 54 68 69 73 20 69 73  uctures. This is
b260: 0a 2b 20 20 20 20 20 2a 20 6e 6f 74 20 66 6f 72  .+     * not for
b270: 20 61 6c 6c 20 73 65 72 69 61 6c 73 20 6d 61 6e   all serials man
b280: 61 67 65 64 20 62 79 20 74 68 65 20 74 68 72 65  aged by the thre
b290: 61 64 2c 20 62 75 74 20 6f 6e 6c 79 20 74 68 6f  ad, but only tho
b2a0: 73 65 20 77 65 20 61 72 65 0a 2b 20 20 20 20 20  se we are.+     
b2b0: 2a 20 77 61 74 63 68 69 6e 67 2e 20 52 65 6d 6f  * watching. Remo
b2c0: 76 61 6c 20 6f 66 20 74 68 65 20 66 69 6c 65 76  val of the filev
b2d0: 65 6e 74 20 68 61 6e 64 6c 65 72 73 20 62 65 66  ent handlers bef
b2e0: 6f 72 65 20 74 72 61 6e 73 66 65 72 20 74 68 75  ore transfer thu
b2f0: 73 0a 2b 20 20 20 20 20 2a 20 74 61 6b 65 73 20  s.+     * takes 
b300: 63 61 72 65 20 6f 66 20 74 68 69 73 20 73 74 72  care of this str
b310: 75 63 74 75 72 65 2e 0a 2b 20 20 20 20 20 2a 2f  ucture..+     */
b320: 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65  .+.+    Tcl_Mute
b330: 78 4c 6f 63 6b 28 26 63 6f 6e 73 6f 6c 65 4d 75  xLock(&consoleMu
b340: 74 65 78 29 3b 0a 2b 20 20 20 20 69 66 20 28 61  tex);.+    if (a
b350: 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41  ction == TCL_CHA
b360: 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45  NNEL_THREAD_INSE
b370: 52 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 2f  RT) {.+        /
b380: 2a 20 57 65 20 63 61 6e 27 74 20 63 6f 70 79 20  * We can't copy 
b390: 74 68 65 20 74 68 72 65 61 64 20 69 6e 66 6f 72  the thread infor
b3a0: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
b3b0: 63 68 61 6e 6e 65 6c 20 77 68 65 6e 0a 2b 09 20  channel when.+. 
b3c0: 2a 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 69 73  * the channel is
b3d0: 20 63 72 65 61 74 65 64 2e 20 41 74 20 74 68 69   created. At thi
b3e0: 73 20 74 69 6d 65 20 74 68 65 20 63 68 61 6e 6e  s time the chann
b3f0: 65 6c 20 62 61 63 6b 0a 2b 09 20 2a 20 70 6f 69  el back.+. * poi
b400: 6e 74 65 72 20 68 61 73 20 6e 6f 74 20 62 65 65  nter has not bee
b410: 6e 20 73 65 74 20 79 65 74 2e 20 48 6f 77 65 76  n set yet. Howev
b420: 65 72 20 69 6e 20 74 68 61 74 20 63 61 73 65 20  er in that case 
b430: 74 68 65 0a 2b 09 20 2a 20 74 68 72 65 61 64 49  the.+. * threadI
b440: 64 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  d has already be
b450: 65 6e 20 73 65 74 20 62 79 20 54 63 6c 70 43 72  en set by TclpCr
b460: 65 61 74 65 43 6f 6d 6d 61 6e 64 43 68 61 6e 6e  eateCommandChann
b470: 65 6c 0a 2b 09 20 2a 20 69 74 73 65 6c 66 2c 20  el.+. * itself, 
b480: 73 6f 20 74 68 65 20 73 74 72 75 63 74 75 72 65  so the structure
b490: 20 69 73 20 73 74 69 6c 6c 20 67 6f 6f 64 2e 0a   is still good..
b4a0: 2b 09 20 2a 2f 0a 2b 0a 2b 20 20 20 20 20 20 20  +. */.+.+       
b4b0: 20 43 6f 6e 73 6f 6c 65 49 6e 69 74 20 28 29 3b   ConsoleInit ();
b4c0: 0a 2b 20 20 20 20 20 20 20 20 69 66 20 28 69 6e  .+        if (in
b4d0: 66 6f 50 74 72 2d 3e 63 68 61 6e 6e 65 6c 20 21  foPtr->channel !
b4e0: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20  = NULL) {.+.    
b4f0: 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49  infoPtr->threadI
b500: 64 20 3d 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e  d = Tcl_GetChann
b510: 65 6c 54 68 72 65 61 64 20 28 69 6e 66 6f 50 74  elThread (infoPt
b520: 72 2d 3e 63 68 61 6e 6e 65 6c 29 3b 0a 2b 09 7d  r->channel);.+.}
b530: 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b  .+    } else {.+
b540: 09 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64  .infoPtr->thread
b550: 49 64 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20  Id = NULL;.+    
b560: 7d 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65 78  }.+    Tcl_Mutex
b570: 55 6e 6c 6f 63 6b 28 26 63 6f 6e 73 6f 6c 65 4d  Unlock(&consoleM
b580: 75 74 65 78 29 3b 0a 2b 7d 0a 49 6e 64 65 78 3a  utex);.+}.Index:
b590: 20 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 65 2e   win/tclWinPipe.
b5a0: 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  c.==============
b5b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
b5c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
b5d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
b5e0: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20  =====.RCS file: 
b5f0: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c  /cvsroot/tcl/tcl
b600: 2f 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 65 2e  /win/tclWinPipe.
b610: 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72  c,v.retrieving r
b620: 65 76 69 73 69 6f 6e 20 31 2e 33 33 2e 32 2e 38  evision 1.33.2.8
b630: 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e  .diff -w -u -r1.
b640: 33 33 2e 32 2e 38 20 74 63 6c 57 69 6e 50 69 70  33.2.8 tclWinPip
b650: 65 2e 63 0a 2d 2d 2d 20 77 69 6e 2f 74 63 6c 57  e.c.--- win/tclW
b660: 69 6e 50 69 70 65 2e 63 09 31 30 20 4d 61 79 20  inPipe.c.10 May 
b670: 32 30 30 34 20 32 30 3a 35 35 3a 34 34 20 2d 30  2004 20:55:44 -0
b680: 30 30 30 09 31 2e 33 33 2e 32 2e 38 0a 2b 2b 2b  000.1.33.2.8.+++
b690: 20 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 65 2e   win/tclWinPipe.
b6a0: 63 09 32 37 20 4a 61 6e 20 32 30 30 35 20 32 32  c.27 Jan 2005 22
b6b0: 3a 34 39 3a 31 39 20 2d 30 30 30 30 0a 40 40 20  :49:19 -0000.@@ 
b6c0: 2d 32 30 35 2c 36 20 2b 32 30 35 2c 39 20 40 40  -205,6 +205,9 @@
b6d0: 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 54 65  . static int..Te
b6e0: 6d 70 46 69 6c 65 4e 61 6d 65 28 57 43 48 41 52  mpFileName(WCHAR
b6f0: 20 6e 61 6d 65 5b 4d 41 58 5f 50 41 54 48 5d 29   name[MAX_PATH])
b700: 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 57  ;. static int..W
b710: 61 69 74 46 6f 72 52 65 61 64 28 50 69 70 65 49  aitForRead(PipeI
b720: 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 2c 20 69 6e  nfo *infoPtr, in
b730: 74 20 62 6c 6f 63 6b 69 6e 67 29 3b 0a 20 0a 2b  t blocking);. .+
b740: 73 74 61 74 69 63 20 76 6f 69 64 20 20 20 20 20  static void     
b750: 20 20 20 20 20 20 20 20 50 69 70 65 54 68 72 65          PipeThre
b760: 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 5f 41 4e  adActionProc _AN
b770: 53 49 5f 41 52 47 53 5f 20 28 28 0a 2b 09 09 09  SI_ARGS_ ((.+...
b780: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e     ClientData in
b790: 73 74 61 6e 63 65 44 61 74 61 2c 20 69 6e 74 20  stanceData, int 
b7a0: 61 63 74 69 6f 6e 29 29 3b 0a 2b 0a 20 2f 2a 0a  action));.+. /*.
b7b0: 20 20 2a 20 54 68 69 73 20 73 74 72 75 63 74 75    * This structu
b7c0: 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65  re describes the
b7d0: 20 63 68 61 6e 6e 65 6c 20 74 79 70 65 20 73 74   channel type st
b7e0: 72 75 63 74 75 72 65 20 66 6f 72 20 63 6f 6d 6d  ructure for comm
b7f0: 61 6e 64 20 70 69 70 65 0a 20 20 2a 20 62 61 73  and pipe.  * bas
b800: 65 64 20 49 4f 2e 0a 40 40 20 2d 32 31 32 2c 37  ed IO..@@ -212,7
b810: 20 2b 32 31 35 2c 37 20 40 40 0a 20 0a 20 73 74   +215,7 @@. . st
b820: 61 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e 65 6c  atic Tcl_Channel
b830: 54 79 70 65 20 70 69 70 65 43 68 61 6e 6e 65 6c  Type pipeChannel
b840: 54 79 70 65 20 3d 20 7b 0a 20 20 20 20 20 22 70  Type = {.     "p
b850: 69 70 65 22 2c 09 09 09 2f 2a 20 54 79 70 65 20  ipe",.../* Type 
b860: 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 54 43  name. */.-    TC
b870: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f  L_CHANNEL_VERSIO
b880: 4e 5f 32 2c 09 2f 2a 20 76 32 20 63 68 61 6e 6e  N_2,./* v2 chann
b890: 65 6c 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43  el */.+    TCL_C
b8a0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34  HANNEL_VERSION_4
b8b0: 2c 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20  ,./* v4 channel 
b8c0: 2a 2f 0a 20 20 20 20 20 54 43 4c 5f 43 4c 4f 53  */.     TCL_CLOS
b8d0: 45 32 50 52 4f 43 2c 09 09 2f 2a 20 43 6c 6f 73  E2PROC,../* Clos
b8e0: 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20  e proc. */.     
b8f0: 50 69 70 65 49 6e 70 75 74 50 72 6f 63 2c 09 09  PipeInputProc,..
b900: 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e 20 2a  /* Input proc. *
b910: 2f 0a 20 20 20 20 20 50 69 70 65 4f 75 74 70 75  /.     PipeOutpu
b920: 74 50 72 6f 63 2c 09 09 2f 2a 20 4f 75 74 70 75  tProc,../* Outpu
b930: 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d 32  t proc. */.@@ -2
b940: 32 35 2c 36 20 2b 32 32 38 2c 38 20 40 40 0a 20  25,6 +228,8 @@. 
b950: 20 20 20 20 50 69 70 65 42 6c 6f 63 6b 4d 6f 64      PipeBlockMod
b960: 65 50 72 6f 63 2c 09 09 2f 2a 20 53 65 74 20 62  eProc,../* Set b
b970: 6c 6f 63 6b 69 6e 67 20 6f 72 20 6e 6f 6e 2d 62  locking or non-b
b980: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a  locking mode.*/.
b990: 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20       NULL,.../* 
b9a0: 66 6c 75 73 68 20 70 72 6f 63 2e 20 2a 2f 0a 20  flush proc. */. 
b9b0: 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 68      NULL,.../* h
b9c0: 61 6e 64 6c 65 72 20 70 72 6f 63 2e 20 2a 2f 0a  andler proc. */.
b9d0: 2b 20 20 20 20 4e 55 4c 4c 2c 20 20 20 20 20 20  +    NULL,      
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 2f 2a 20 77 69 64 65 20 73 65 65 6b 20 70 72   /* wide seek pr
ba00: 6f 63 20 2a 2f 0a 2b 20 20 20 20 50 69 70 65 54  oc */.+    PipeT
ba10: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 2c  hreadActionProc,
ba20: 20 20 20 20 20 20 20 2f 2a 20 74 68 72 65 61 64         /* thread
ba30: 20 61 63 74 69 6f 6e 20 70 72 6f 63 20 2a 2f 0a   action proc */.
ba40: 20 7d 3b 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d 31   };. .. /*.@@ -1
ba50: 36 38 39 2c 36 20 2b 31 36 39 34 2c 37 20 40 40  689,6 +1694,7 @@
ba60: 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 77  .     infoPtr->w
ba70: 72 69 74 65 42 75 66 20 3d 20 30 3b 0a 20 20 20  riteBuf = 0;.   
ba80: 20 20 69 6e 66 6f 50 74 72 2d 3e 77 72 69 74 65    infoPtr->write
ba90: 42 75 66 4c 65 6e 20 3d 20 30 3b 0a 20 20 20 20  BufLen = 0;.    
baa0: 20 69 6e 66 6f 50 74 72 2d 3e 77 72 69 74 65 45   infoPtr->writeE
bab0: 72 72 6f 72 20 3d 20 30 3b 0a 2b 20 20 20 20 69  rror = 0;.+    i
bac0: 6e 66 6f 50 74 72 2d 3e 63 68 61 6e 6e 65 6c 20  nfoPtr->channel 
bad0: 3d 20 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 29 20  = (Tcl_Channel) 
bae0: 4e 55 4c 4c 3b 0a 20 0a 20 20 20 20 20 2f 2a 0a  NULL;. .     /*.
baf0: 20 20 20 20 20 20 2a 20 55 73 65 20 6f 6e 65 20        * Use one 
bb00: 6f 66 20 74 68 65 20 66 64 73 20 61 73 73 6f 63  of the fds assoc
bb10: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63  iated with the c
bb20: 68 61 6e 6e 65 6c 20 61 73 20 74 68 65 0a 40 40  hannel as the.@@
bb30: 20 2d 32 39 33 31 2c 37 20 2b 32 39 33 37 2c 31   -2931,7 +2937,1
bb40: 30 20 40 40 0a 20 09 20 2a 2f 0a 20 0a 20 09 54  0 @@. . */. . .T
bb50: 63 6c 5f 4d 75 74 65 78 4c 6f 63 6b 28 26 70 69  cl_MutexLock(&pi
bb60: 70 65 4d 75 74 65 78 29 3b 0a 2b 09 69 66 20 28  peMutex);.+.if (
bb70: 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49  infoPtr->threadI
bb80: 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20  d != NULL) {.+. 
bb90: 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 2e 20     /* TIP #218. 
bba0: 57 68 65 6e 20 69 6e 20 66 6c 69 67 68 74 20 69  When in flight i
bbb0: 67 6e 6f 72 65 20 74 68 65 20 65 76 65 6e 74 2c  gnore the event,
bbc0: 20 6e 6f 20 6f 6e 65 20 77 69 6c 6c 20 72 65 63   no one will rec
bbd0: 65 69 76 65 20 69 74 20 61 6e 79 77 61 79 20 2a  eive it anyway *
bbe0: 2f 0a 20 09 54 63 6c 5f 54 68 72 65 61 64 41 6c  /. .Tcl_ThreadAl
bbf0: 65 72 74 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72  ert(infoPtr->thr
bc00: 65 61 64 49 64 29 3b 0a 2b 09 7d 0a 20 09 54 63  eadId);.+.}. .Tc
bc10: 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 70  l_MutexUnlock(&p
bc20: 69 70 65 4d 75 74 65 78 29 3b 0a 20 20 20 20 20  ipeMutex);.     
bc30: 7d 0a 20 0a 40 40 20 2d 33 30 31 39 2c 31 30 20  }. .@@ -3019,10 
bc40: 2b 33 30 32 38 2c 36 30 20 40 40 0a 20 09 20 2a  +3028,60 @@. . *
bc50: 2f 0a 20 0a 20 09 54 63 6c 5f 4d 75 74 65 78 4c  /. . .Tcl_MutexL
bc60: 6f 63 6b 28 26 70 69 70 65 4d 75 74 65 78 29 3b  ock(&pipeMutex);
bc70: 0a 2b 09 69 66 20 28 69 6e 66 6f 50 74 72 2d 3e  .+.if (infoPtr->
bc80: 74 68 72 65 61 64 49 64 20 21 3d 20 4e 55 4c 4c  threadId != NULL
bc90: 29 20 7b 0a 2b 09 20 20 20 20 2f 2a 20 54 49 50  ) {.+.    /* TIP
bca0: 20 23 32 31 38 2e 20 57 68 65 6e 20 69 6e 20 66   #218. When in f
bcb0: 6c 69 67 68 74 20 69 67 6e 6f 72 65 20 74 68 65  light ignore the
bcc0: 20 65 76 65 6e 74 2c 20 6e 6f 20 6f 6e 65 20 77   event, no one w
bcd0: 69 6c 6c 20 72 65 63 65 69 76 65 20 69 74 20 61  ill receive it a
bce0: 6e 79 77 61 79 20 2a 2f 0a 20 09 54 63 6c 5f 54  nyway */. .Tcl_T
bcf0: 68 72 65 61 64 41 6c 65 72 74 28 69 6e 66 6f 50  hreadAlert(infoP
bd00: 74 72 2d 3e 74 68 72 65 61 64 49 64 29 3b 0a 2b  tr->threadId);.+
bd10: 09 7d 0a 20 09 54 63 6c 5f 4d 75 74 65 78 55 6e  .}. .Tcl_MutexUn
bd20: 6c 6f 63 6b 28 26 70 69 70 65 4d 75 74 65 78 29  lock(&pipeMutex)
bd30: 3b 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20  ;.     }. .     
bd40: 72 65 74 75 72 6e 20 30 3b 0a 20 7d 0a 20 0a 2b  return 0;. }. .+
bd50: 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*.+ *----------
bd60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
bd70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
bd80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
bd90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a  ------------.+ *
bda0: 0a 2b 20 2a 20 50 69 70 65 54 68 72 65 61 64 41  .+ * PipeThreadA
bdb0: 63 74 69 6f 6e 50 72 6f 63 20 2d 2d 0a 2b 20 2a  ctionProc --.+ *
bdc0: 0a 2b 20 2a 09 49 6e 73 65 72 74 20 6f 72 20 72  .+ *.Insert or r
bdd0: 65 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61 64  emove any thread
bde0: 20 6c 6f 63 61 6c 20 72 65 66 73 20 74 6f 20 74   local refs to t
bdf0: 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 2b 20 2a  his channel..+ *
be00: 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20  .+ * Results:.+ 
be10: 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 20  *.None..+ *.+ * 
be20: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20  Side effects:.+ 
be30: 2a 09 43 68 61 6e 67 65 73 20 74 68 72 65 61 64  *.Changes thread
be40: 20 6c 6f 63 61 6c 20 6c 69 73 74 20 6f 66 20 76   local list of v
be50: 61 6c 69 64 20 63 68 61 6e 6e 65 6c 73 2e 0a 2b  alid channels..+
be60: 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *.+ *----------
be70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
be80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
be90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
bea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a  ------------.+ *
beb0: 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 76 6f 69 64  /.+.+static void
bec0: 0a 2b 50 69 70 65 54 68 72 65 61 64 41 63 74 69  .+PipeThreadActi
bed0: 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 6e 63 65  onProc (instance
bee0: 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 0a 2b 20  Data, action).+ 
bef0: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69      ClientData i
bf00: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20  nstanceData;.+  
bf10: 20 20 20 69 6e 74 20 61 63 74 69 6f 6e 3b 0a 2b     int action;.+
bf20: 7b 0a 2b 20 20 20 20 50 69 70 65 49 6e 66 6f 20  {.+    PipeInfo 
bf30: 2a 69 6e 66 6f 50 74 72 20 3d 20 28 50 69 70 65  *infoPtr = (Pipe
bf40: 49 6e 66 6f 20 2a 29 20 69 6e 73 74 61 6e 63 65  Info *) instance
bf50: 44 61 74 61 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 20  Data;.+.+    /* 
bf60: 57 65 20 64 6f 20 6e 6f 74 20 61 63 63 65 73 73  We do not access
bf70: 20 66 69 72 73 74 50 69 70 65 50 74 72 20 69 6e   firstPipePtr in
bf80: 20 74 68 65 20 74 68 72 65 61 64 20 73 74 72 75   the thread stru
bf90: 63 74 75 72 65 73 2e 20 54 68 69 73 20 69 73 0a  ctures. This is.
bfa0: 2b 20 20 20 20 20 2a 20 6e 6f 74 20 66 6f 72 20  +     * not for 
bfb0: 61 6c 6c 20 70 69 70 65 73 20 6d 61 6e 61 67 65  all pipes manage
bfc0: 64 20 62 79 20 74 68 65 20 74 68 72 65 61 64 2c  d by the thread,
bfd0: 20 62 75 74 20 6f 6e 6c 79 20 74 68 6f 73 65 20   but only those 
bfe0: 77 65 20 61 72 65 0a 2b 20 20 20 20 20 2a 20 77  we are.+     * w
bff0: 61 74 63 68 69 6e 67 2e 20 52 65 6d 6f 76 61 6c  atching. Removal
c000: 20 6f 66 20 74 68 65 20 66 69 6c 65 76 65 6e 74   of the filevent
c010: 20 68 61 6e 64 6c 65 72 73 20 62 65 66 6f 72 65   handlers before
c020: 20 74 72 61 6e 73 66 65 72 20 74 68 75 73 0a 2b   transfer thus.+
c030: 20 20 20 20 20 2a 20 74 61 6b 65 73 20 63 61 72       * takes car
c040: 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
c050: 75 72 65 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a  ure..+     */.+.
c060: 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65 78 4c 6f  +    Tcl_MutexLo
c070: 63 6b 28 26 70 69 70 65 4d 75 74 65 78 29 3b 0a  ck(&pipeMutex);.
c080: 2b 20 20 20 20 69 66 20 28 61 63 74 69 6f 6e 20  +    if (action 
c090: 3d 3d 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54  == TCL_CHANNEL_T
c0a0: 48 52 45 41 44 5f 49 4e 53 45 52 54 29 20 7b 0a  HREAD_INSERT) {.
c0b0: 2b 20 20 20 20 20 20 20 20 2f 2a 20 57 65 20 63  +        /* We c
c0c0: 61 6e 27 74 20 63 6f 70 79 20 74 68 65 20 74 68  an't copy the th
c0d0: 72 65 61 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  read information
c0e0: 20 66 72 6f 6d 20 74 68 65 20 63 68 61 6e 6e 65   from the channe
c0f0: 6c 20 77 68 65 6e 0a 2b 09 20 2a 20 74 68 65 20  l when.+. * the 
c100: 63 68 61 6e 6e 65 6c 20 69 73 20 63 72 65 61 74  channel is creat
c110: 65 64 2e 20 41 74 20 74 68 69 73 20 74 69 6d 65  ed. At this time
c120: 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 62 61 63   the channel bac
c130: 6b 0a 2b 09 20 2a 20 70 6f 69 6e 74 65 72 20 68  k.+. * pointer h
c140: 61 73 20 6e 6f 74 20 62 65 65 6e 20 73 65 74 20  as not been set 
c150: 79 65 74 2e 20 48 6f 77 65 76 65 72 20 69 6e 20  yet. However in 
c160: 74 68 61 74 20 63 61 73 65 20 74 68 65 0a 2b 09  that case the.+.
c170: 20 2a 20 74 68 72 65 61 64 49 64 20 68 61 73 20   * threadId has 
c180: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 73 65 74  already been set
c190: 20 62 79 20 54 63 6c 70 43 72 65 61 74 65 43 6f   by TclpCreateCo
c1a0: 6d 6d 61 6e 64 43 68 61 6e 6e 65 6c 0a 2b 09 20  mmandChannel.+. 
c1b0: 2a 20 69 74 73 65 6c 66 2c 20 73 6f 20 74 68 65  * itself, so the
c1c0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
c1d0: 69 6c 6c 20 67 6f 6f 64 2e 0a 2b 09 20 2a 2f 0a  ill good..+. */.
c1e0: 2b 0a 2b 20 20 20 20 20 20 20 20 50 69 70 65 49  +.+        PipeI
c1f0: 6e 69 74 20 28 29 3b 0a 2b 20 20 20 20 20 20 20  nit ();.+       
c200: 20 69 66 20 28 69 6e 66 6f 50 74 72 2d 3e 63 68   if (infoPtr->ch
c210: 61 6e 6e 65 6c 20 21 3d 20 4e 55 4c 4c 29 20 7b  annel != NULL) {
c220: 0a 2b 09 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e  .+.    infoPtr->
c230: 74 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f 47  threadId = Tcl_G
c240: 65 74 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 20  etChannelThread 
c250: 28 69 6e 66 6f 50 74 72 2d 3e 63 68 61 6e 6e 65  (infoPtr->channe
c260: 6c 29 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 20 65  l);.+.}.+    } e
c270: 6c 73 65 20 7b 0a 2b 09 69 6e 66 6f 50 74 72 2d  lse {.+.infoPtr-
c280: 3e 74 68 72 65 61 64 49 64 20 3d 20 4e 55 4c 4c  >threadId = NULL
c290: 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 54 63  ;.+    }.+    Tc
c2a0: 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 70  l_MutexUnlock(&p
c2b0: 69 70 65 4d 75 74 65 78 29 3b 0a 2b 7d 0a 49 6e  ipeMutex);.+}.In
c2c0: 64 65 78 3a 20 77 69 6e 2f 74 63 6c 57 69 6e 53  dex: win/tclWinS
c2d0: 65 72 69 61 6c 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d  erial.c.========
c2e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
c2f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
c300: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
c310: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20  ===========.RCS 
c320: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74  file: /cvsroot/t
c330: 63 6c 2f 74 63 6c 2f 77 69 6e 2f 74 63 6c 57 69  cl/tcl/win/tclWi
c340: 6e 53 65 72 69 61 6c 2e 63 2c 76 0a 72 65 74 72  nSerial.c,v.retr
c350: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20  ieving revision 
c360: 31 2e 32 35 2e 32 2e 31 0a 64 69 66 66 20 2d 77  1.25.2.1.diff -w
c370: 20 2d 75 20 2d 72 31 2e 32 35 2e 32 2e 31 20 74   -u -r1.25.2.1 t
c380: 63 6c 57 69 6e 53 65 72 69 61 6c 2e 63 0a 2d 2d  clWinSerial.c.--
c390: 2d 20 77 69 6e 2f 74 63 6c 57 69 6e 53 65 72 69  - win/tclWinSeri
c3a0: 61 6c 2e 63 09 31 31 20 4d 61 79 20 32 30 30 33  al.c.11 May 2003
c3b0: 20 30 30 3a 33 31 3a 34 31 20 2d 30 30 30 30 09   00:31:41 -0000.
c3c0: 31 2e 32 35 2e 32 2e 31 0a 2b 2b 2b 20 77 69 6e  1.25.2.1.+++ win
c3d0: 2f 74 63 6c 57 69 6e 53 65 72 69 61 6c 2e 63 09  /tclWinSerial.c.
c3e0: 32 37 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34  27 Jan 2005 22:4
c3f0: 39 3a 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 31  9:19 -0000.@@ -1
c400: 39 30 2c 36 20 2b 31 39 30 2c 39 20 40 40 0a 20  90,6 +190,9 @@. 
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c420: 43 4f 4e 53 54 20 63 68 61 72 20 2a 76 61 6c 75  CONST char *valu
c430: 65 29 29 3b 0a 20 73 74 61 74 69 63 20 44 57 4f  e));. static DWO
c440: 52 44 20 57 49 4e 41 50 49 20 20 20 20 20 53 65  RD WINAPI     Se
c450: 72 69 61 6c 57 72 69 74 65 72 54 68 72 65 61 64  rialWriterThread
c460: 28 4c 50 56 4f 49 44 20 61 72 67 29 3b 0a 20 0a  (LPVOID arg);. .
c470: 2b 73 74 61 74 69 63 20 76 6f 69 64 20 20 20 20  +static void    
c480: 20 20 20 20 20 20 20 20 20 53 65 72 69 61 6c 54           SerialT
c490: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20  hreadActionProc 
c4a0: 5f 41 4e 53 49 5f 41 52 47 53 5f 20 28 28 0a 2b  _ANSI_ARGS_ ((.+
c4b0: 09 09 09 20 20 20 43 6c 69 65 6e 74 44 61 74 61  ...   ClientData
c4c0: 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 69   instanceData, i
c4d0: 6e 74 20 61 63 74 69 6f 6e 29 29 3b 0a 2b 0a 20  nt action));.+. 
c4e0: 2f 2a 0a 20 20 2a 20 54 68 69 73 20 73 74 72 75  /*.  * This stru
c4f0: 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
c500: 74 68 65 20 63 68 61 6e 6e 65 6c 20 74 79 70 65  the channel type
c510: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 63   structure for c
c520: 6f 6d 6d 61 6e 64 20 73 65 72 69 61 6c 0a 20 20  ommand serial.  
c530: 2a 20 62 61 73 65 64 20 49 4f 2e 0a 40 40 20 2d  * based IO..@@ -
c540: 31 39 37 2c 37 20 2b 32 30 30 2c 37 20 40 40 0a  197,7 +200,7 @@.
c550: 20 0a 20 73 74 61 74 69 63 20 54 63 6c 5f 43 68   . static Tcl_Ch
c560: 61 6e 6e 65 6c 54 79 70 65 20 73 65 72 69 61 6c  annelType serial
c570: 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a  ChannelType = {.
c580: 20 20 20 20 20 22 73 65 72 69 61 6c 22 2c 20 20       "serial",  
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5a0: 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a   /* Type name. *
c5b0: 2f 0a 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e  /.-    TCL_CHANN
c5c0: 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 2c 20 20 20  EL_VERSION_2,   
c5d0: 20 20 20 2f 2a 20 76 32 20 63 68 61 6e 6e 65 6c     /* v2 channel
c5e0: 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43 48 41   */.+    TCL_CHA
c5f0: 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 2c 20  NNEL_VERSION_4, 
c600: 20 20 20 20 20 2f 2a 20 76 34 20 63 68 61 6e 6e       /* v4 chann
c610: 65 6c 20 2a 2f 0a 20 20 20 20 20 53 65 72 69 61  el */.     Seria
c620: 6c 43 6c 6f 73 65 50 72 6f 63 2c 20 20 20 20 20  lCloseProc,     
c630: 20 20 20 20 20 20 20 2f 2a 20 43 6c 6f 73 65 20         /* Close 
c640: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 53 65  proc. */.     Se
c650: 72 69 61 6c 49 6e 70 75 74 50 72 6f 63 2c 20 20  rialInputProc,  
c660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 70            /* Inp
c670: 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20  ut proc. */.    
c680: 20 53 65 72 69 61 6c 4f 75 74 70 75 74 50 72 6f   SerialOutputPro
c690: 63 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  c,           /* 
c6a0: 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f 0a  Output proc. */.
c6b0: 40 40 20 2d 32 31 30 2c 36 20 2b 32 31 33 2c 38  @@ -210,6 +213,8
c6c0: 20 40 40 0a 20 20 20 20 20 53 65 72 69 61 6c 42   @@.     SerialB
c6d0: 6c 6f 63 6b 50 72 6f 63 2c 20 20 20 20 20 20 20  lockProc,       
c6e0: 20 20 20 20 20 2f 2a 20 53 65 74 20 62 6c 6f 63       /* Set bloc
c6f0: 6b 69 6e 67 20 6f 72 20 6e 6f 6e 2d 62 6c 6f 63  king or non-bloc
c700: 6b 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a 20 20 20  king mode.*/.   
c710: 20 20 4e 55 4c 4c 2c 20 20 20 20 20 20 20 20 20    NULL,         
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c730: 20 66 6c 75 73 68 20 70 72 6f 63 2e 20 2a 2f 0a   flush proc. */.
c740: 20 20 20 20 20 4e 55 4c 4c 2c 20 20 20 20 20 20       NULL,      
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c760: 20 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63   /* handler proc
c770: 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20  . */.+    NULL, 
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c790: 20 20 20 20 20 20 2f 2a 20 77 69 64 65 20 73 65        /* wide se
c7a0: 65 6b 20 70 72 6f 63 20 2a 2f 0a 2b 20 20 20 20  ek proc */.+    
c7b0: 53 65 72 69 61 6c 54 68 72 65 61 64 41 63 74 69  SerialThreadActi
c7c0: 6f 6e 50 72 6f 63 2c 20 20 20 20 20 2f 2a 20 74  onProc,     /* t
c7d0: 68 72 65 61 64 20 61 63 74 69 6f 6e 20 70 72 6f  hread action pro
c7e0: 63 20 2a 2f 0a 20 7d 3b 0a 20 0a 20 2f 2a 0a 40  c */. };. . /*.@
c7f0: 40 20 2d 31 33 34 36 2c 37 20 2b 31 33 35 31 2c  @ -1346,7 +1351,
c800: 31 30 20 40 40 0a 20 20 20 20 20 20 20 20 20 20  10 @@.          
c810: 2a 2f 0a 20 0a 20 20 20 20 20 20 20 20 20 54 63  */. .         Tc
c820: 6c 5f 4d 75 74 65 78 4c 6f 63 6b 28 26 73 65 72  l_MutexLock(&ser
c830: 69 61 6c 4d 75 74 65 78 29 3b 0a 2b 09 69 66 20  ialMutex);.+.if 
c840: 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64  (infoPtr->thread
c850: 49 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09  Id != NULL) {.+.
c860: 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 2e      /* TIP #218.
c870: 20 57 68 65 6e 20 69 6e 20 66 6c 69 67 68 74 20   When in flight 
c880: 69 67 6e 6f 72 65 20 74 68 65 20 65 76 65 6e 74  ignore the event
c890: 2c 20 6e 6f 20 6f 6e 65 20 77 69 6c 6c 20 72 65  , no one will re
c8a0: 63 65 69 76 65 20 69 74 20 61 6e 79 77 61 79 20  ceive it anyway 
c8b0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 54 63 6c 5f  */.         Tcl_
c8c0: 54 68 72 65 61 64 41 6c 65 72 74 28 69 6e 66 6f  ThreadAlert(info
c8d0: 50 74 72 2d 3e 74 68 72 65 61 64 49 64 29 3b 0a  Ptr->threadId);.
c8e0: 2b 09 7d 0a 20 20 20 20 20 20 20 20 20 54 63 6c  +.}.         Tcl
c8f0: 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 73 65  _MutexUnlock(&se
c900: 72 69 61 6c 4d 75 74 65 78 29 3b 0a 20 20 20 20  rialMutex);.    
c910: 20 7d 0a 20 0a 40 40 20 2d 31 34 31 39 2c 31 36   }. .@@ -1419,16
c920: 20 2b 31 34 32 37 2c 32 35 20 40 40 0a 20 20 20   +1427,25 @@.   
c930: 20 20 69 6e 74 20 70 65 72 6d 69 73 73 69 6f 6e    int permission
c940: 73 3b 0a 20 7b 0a 20 20 20 20 20 53 65 72 69 61  s;. {.     Seria
c950: 6c 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 3b 0a  lInfo *infoPtr;.
c960: 2d 20 20 20 20 54 68 72 65 61 64 53 70 65 63 69  -    ThreadSpeci
c970: 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 72 3b  ficData *tsdPtr;
c980: 0a 20 20 20 20 20 44 57 4f 52 44 20 69 64 3b 0a  .     DWORD id;.
c990: 20 0a 2d 20 20 20 20 74 73 64 50 74 72 20 3d 20   .-    tsdPtr = 
c9a0: 53 65 72 69 61 6c 49 6e 69 74 28 29 3b 0a 2b 20  SerialInit();.+ 
c9b0: 20 20 20 53 65 72 69 61 6c 49 6e 69 74 28 29 3b     SerialInit();
c9c0: 0a 20 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 20  . .     infoPtr 
c9d0: 3d 20 28 53 65 72 69 61 6c 49 6e 66 6f 20 2a 29  = (SerialInfo *)
c9e0: 20 63 6b 61 6c 6c 6f 63 28 28 75 6e 73 69 67 6e   ckalloc((unsign
c9f0: 65 64 29 20 73 69 7a 65 6f 66 28 53 65 72 69 61  ed) sizeof(Seria
ca00: 6c 49 6e 66 6f 29 29 3b 0a 20 20 20 20 20 6d 65  lInfo));.     me
ca10: 6d 73 65 74 28 69 6e 66 6f 50 74 72 2c 20 30 2c  mset(infoPtr, 0,
ca20: 20 73 69 7a 65 6f 66 28 53 65 72 69 61 6c 49 6e   sizeof(SerialIn
ca30: 66 6f 29 29 3b 0a 20 0a 20 20 20 20 20 69 6e 66  fo));. .     inf
ca40: 6f 50 74 72 2d 3e 76 61 6c 69 64 4d 61 73 6b 20  oPtr->validMask 
ca50: 3d 20 70 65 72 6d 69 73 73 69 6f 6e 73 3b 0a 20  = permissions;. 
ca60: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 68 61 6e      infoPtr->han
ca70: 64 6c 65 20 3d 20 68 61 6e 64 6c 65 3b 0a 2b 20  dle = handle;.+ 
ca80: 20 20 20 69 6e 66 6f 50 74 72 2d 3e 63 68 61 6e     infoPtr->chan
ca90: 6e 65 6c 20 20 20 20 20 20 20 3d 20 28 54 63 6c  nel       = (Tcl
caa0: 5f 43 68 61 6e 6e 65 6c 29 20 4e 55 4c 4c 3b 0a  _Channel) NULL;.
cab0: 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 72 65  +    infoPtr->re
cac0: 61 64 61 62 6c 65 20 20 20 20 20 20 3d 20 30 3b  adable      = 0;
cad0: 20 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e   .+    infoPtr->
cae0: 77 72 69 74 61 62 6c 65 20 20 20 20 20 20 3d 20  writable      = 
caf0: 31 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d  1;.+    infoPtr-
cb00: 3e 74 6f 57 72 69 74 65 20 20 20 20 20 20 20 3d  >toWrite       =
cb10: 20 69 6e 66 6f 50 74 72 2d 3e 77 72 69 74 65 51   infoPtr->writeQ
cb20: 75 65 75 65 20 3d 20 30 3b 0a 2b 20 20 20 20 69  ueue = 0;.+    i
cb30: 6e 66 6f 50 74 72 2d 3e 62 6c 6f 63 6b 54 69 6d  nfoPtr->blockTim
cb40: 65 20 20 20 20 20 3d 20 53 45 52 49 41 4c 5f 44  e     = SERIAL_D
cb50: 45 46 41 55 4c 54 5f 42 4c 4f 43 4b 54 49 4d 45  EFAULT_BLOCKTIME
cb60: 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e  ;.+    infoPtr->
cb70: 6c 61 73 74 45 76 65 6e 74 54 69 6d 65 20 3d 20  lastEventTime = 
cb80: 30 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d  0;.+    infoPtr-
cb90: 3e 6c 61 73 74 45 72 72 6f 72 20 20 20 20 20 3d  >lastError     =
cba0: 20 69 6e 66 6f 50 74 72 2d 3e 65 72 72 6f 72 20   infoPtr->error 
cbb0: 3d 20 30 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74  = 0;.+    infoPt
cbc0: 72 2d 3e 74 68 72 65 61 64 49 64 20 20 20 20 20  r->threadId     
cbd0: 20 3d 20 54 63 6c 5f 47 65 74 43 75 72 72 65 6e   = Tcl_GetCurren
cbe0: 74 54 68 72 65 61 64 28 29 3b 0a 2b 20 20 20 20  tThread();.+    
cbf0: 69 6e 66 6f 50 74 72 2d 3e 73 79 73 42 75 66 52  infoPtr->sysBufR
cc00: 65 61 64 20 20 20 20 3d 20 34 30 39 36 3b 0a 2b  ead    = 4096;.+
cc10: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 73 79 73      infoPtr->sys
cc20: 42 75 66 57 72 69 74 65 20 20 20 3d 20 34 30 39  BufWrite   = 409
cc30: 36 3b 0a 20 0a 20 20 20 20 20 2f 2a 0a 20 20 20  6;. .     /*.   
cc40: 20 20 20 2a 20 55 73 65 20 74 68 65 20 70 6f 69     * Use the poi
cc50: 6e 74 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  nter to keep the
cc60: 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 73 20 75   channel names u
cc70: 6e 69 71 75 65 2c 20 69 6e 20 63 61 73 65 0a 40  nique, in case.@
cc80: 40 20 2d 31 34 34 30 2c 31 34 20 2b 31 34 35 37  @ -1440,14 +1457
cc90: 2c 36 20 40 40 0a 20 20 20 20 20 69 6e 66 6f 50  ,6 @@.     infoP
cca0: 74 72 2d 3e 63 68 61 6e 6e 65 6c 20 3d 20 54 63  tr->channel = Tc
ccb0: 6c 5f 43 72 65 61 74 65 43 68 61 6e 6e 65 6c 28  l_CreateChannel(
ccc0: 26 73 65 72 69 61 6c 43 68 61 6e 6e 65 6c 54 79  &serialChannelTy
ccd0: 70 65 2c 20 63 68 61 6e 6e 65 6c 4e 61 6d 65 2c  pe, channelName,
cce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 43  .             (C
ccf0: 6c 69 65 6e 74 44 61 74 61 29 20 69 6e 66 6f 50  lientData) infoP
cd00: 74 72 2c 20 70 65 72 6d 69 73 73 69 6f 6e 73 29  tr, permissions)
cd10: 3b 0a 20 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72  ;. .-    infoPtr
cd20: 2d 3e 72 65 61 64 61 62 6c 65 20 3d 20 30 3b 20  ->readable = 0; 
cd30: 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 77  .-    infoPtr->w
cd40: 72 69 74 61 62 6c 65 20 3d 20 31 3b 0a 2d 20 20  ritable = 1;.-  
cd50: 20 20 69 6e 66 6f 50 74 72 2d 3e 74 6f 57 72 69    infoPtr->toWri
cd60: 74 65 20 3d 20 69 6e 66 6f 50 74 72 2d 3e 77 72  te = infoPtr->wr
cd70: 69 74 65 51 75 65 75 65 20 3d 20 30 3b 0a 2d 20  iteQueue = 0;.- 
cd80: 20 20 20 69 6e 66 6f 50 74 72 2d 3e 62 6c 6f 63     infoPtr->bloc
cd90: 6b 54 69 6d 65 20 3d 20 53 45 52 49 41 4c 5f 44  kTime = SERIAL_D
cda0: 45 46 41 55 4c 54 5f 42 4c 4f 43 4b 54 49 4d 45  EFAULT_BLOCKTIME
cdb0: 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e  ;.-    infoPtr->
cdc0: 6c 61 73 74 45 76 65 6e 74 54 69 6d 65 20 3d 20  lastEventTime = 
cdd0: 30 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d  0;.-    infoPtr-
cde0: 3e 6c 61 73 74 45 72 72 6f 72 20 3d 20 69 6e 66  >lastError = inf
cdf0: 6f 50 74 72 2d 3e 65 72 72 6f 72 20 3d 20 30 3b  oPtr->error = 0;
ce00: 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 74  .-    infoPtr->t
ce10: 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f 47 65  hreadId = Tcl_Ge
ce20: 74 43 75 72 72 65 6e 74 54 68 72 65 61 64 28 29  tCurrentThread()
ce30: 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e  ;.-    infoPtr->
ce40: 73 79 73 42 75 66 52 65 61 64 20 3d 20 69 6e 66  sysBufRead = inf
ce50: 6f 50 74 72 2d 3e 73 79 73 42 75 66 57 72 69 74  oPtr->sysBufWrit
ce60: 65 20 3d 20 34 30 39 36 3b 0a 20 0a 20 20 20 20  e = 4096;. .    
ce70: 20 53 65 74 75 70 43 6f 6d 6d 28 68 61 6e 64 6c   SetupComm(handl
ce80: 65 2c 20 69 6e 66 6f 50 74 72 2d 3e 73 79 73 42  e, infoPtr->sysB
ce90: 75 66 52 65 61 64 2c 20 69 6e 66 6f 50 74 72 2d  ufRead, infoPtr-
cea0: 3e 73 79 73 42 75 66 57 72 69 74 65 29 3b 0a 20  >sysBufWrite);. 
ceb0: 20 20 20 20 50 75 72 67 65 43 6f 6d 6d 28 68 61      PurgeComm(ha
cec0: 6e 64 6c 65 2c 20 50 55 52 47 45 5f 54 58 41 42  ndle, PURGE_TXAB
ced0: 4f 52 54 20 7c 20 50 55 52 47 45 5f 52 58 41 42  ORT | PURGE_RXAB
cee0: 4f 52 54 20 7c 20 50 55 52 47 45 5f 54 58 43 4c  ORT | PURGE_TXCL
cef0: 45 41 52 20 0a 40 40 20 2d 32 31 30 37 2c 33 20  EAR .@@ -2107,3 
cf00: 2b 32 31 31 36 2c 35 31 20 40 40 0a 20 20 20 20  +2116,51 @@.    
cf10: 20 20 20 20 20 20 20 20 20 22 6d 6f 64 65 20 70           "mode p
cf20: 6f 6c 6c 69 6e 74 65 72 76 61 6c 20 6c 61 73 74  ollinterval last
cf30: 65 72 72 6f 72 20 71 75 65 75 65 20 73 79 73 62  error queue sysb
cf40: 75 66 66 65 72 20 74 74 79 73 74 61 74 75 73 20  uffer ttystatus 
cf50: 78 63 68 61 72 22 29 3b 0a 20 20 20 20 20 7d 0a  xchar");.     }.
cf60: 20 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d   }.+..+/*.+ *---
cf70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
cf80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
cf90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
cfa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
cfb0: 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 53 65 72 69  ---.+ *.+ * Seri
cfc0: 61 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72  alThreadActionPr
cfd0: 6f 63 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 49 6e  oc --.+ *.+ *.In
cfe0: 73 65 72 74 20 6f 72 20 72 65 6d 6f 76 65 20 61  sert or remove a
cff0: 6e 79 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20  ny thread local 
d000: 72 65 66 73 20 74 6f 20 74 68 69 73 20 63 68 61  refs to this cha
d010: 6e 6e 65 6c 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65  nnel..+ *.+ * Re
d020: 73 75 6c 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e  sults:.+ *.None.
d030: 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66  .+ *.+ * Side ef
d040: 66 65 63 74 73 3a 0a 2b 20 2a 09 43 68 61 6e 67  fects:.+ *.Chang
d050: 65 73 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20  es thread local 
d060: 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 20 63 68  list of valid ch
d070: 61 6e 6e 65 6c 73 2e 0a 2b 20 2a 0a 2b 20 2a 2d  annels..+ *.+ *-
d080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
d090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
d0a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
d0b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
d0c0: 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74  -----.+ */.+.+st
d0d0: 61 74 69 63 20 76 6f 69 64 0a 2b 53 65 72 69 61  atic void.+Seria
d0e0: 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f  lThreadActionPro
d0f0: 63 20 28 69 6e 73 74 61 6e 63 65 44 61 74 61 2c  c (instanceData,
d100: 20 61 63 74 69 6f 6e 29 0a 2b 20 20 20 20 20 43   action).+     C
d110: 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e  lientData instan
d120: 63 65 44 61 74 61 3b 0a 2b 20 20 20 20 20 69 6e  ceData;.+     in
d130: 74 20 61 63 74 69 6f 6e 3b 0a 2b 7b 0a 2b 20 20  t action;.+{.+  
d140: 20 20 53 65 72 69 61 6c 49 6e 66 6f 20 2a 69 6e    SerialInfo *in
d150: 66 6f 50 74 72 20 3d 20 28 53 65 72 69 61 6c 49  foPtr = (SerialI
d160: 6e 66 6f 20 2a 29 20 69 6e 73 74 61 6e 63 65 44  nfo *) instanceD
d170: 61 74 61 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 20 57  ata;.+.+    /* W
d180: 65 20 64 6f 20 6e 6f 74 20 61 63 63 65 73 73 20  e do not access 
d190: 66 69 72 73 74 53 65 72 69 61 6c 50 74 72 20 69  firstSerialPtr i
d1a0: 6e 20 74 68 65 20 74 68 72 65 61 64 20 73 74 72  n the thread str
d1b0: 75 63 74 75 72 65 73 2e 20 54 68 69 73 20 69 73  uctures. This is
d1c0: 0a 2b 20 20 20 20 20 2a 20 6e 6f 74 20 66 6f 72  .+     * not for
d1d0: 20 61 6c 6c 20 73 65 72 69 61 6c 73 20 6d 61 6e   all serials man
d1e0: 61 67 65 64 20 62 79 20 74 68 65 20 74 68 72 65  aged by the thre
d1f0: 61 64 2c 20 62 75 74 20 6f 6e 6c 79 20 74 68 6f  ad, but only tho
d200: 73 65 20 77 65 20 61 72 65 0a 2b 20 20 20 20 20  se we are.+     
d210: 2a 20 77 61 74 63 68 69 6e 67 2e 20 52 65 6d 6f  * watching. Remo
d220: 76 61 6c 20 6f 66 20 74 68 65 20 66 69 6c 65 76  val of the filev
d230: 65 6e 74 20 68 61 6e 64 6c 65 72 73 20 62 65 66  ent handlers bef
d240: 6f 72 65 20 74 72 61 6e 73 66 65 72 20 74 68 75  ore transfer thu
d250: 73 0a 2b 20 20 20 20 20 2a 20 74 61 6b 65 73 20  s.+     * takes 
d260: 63 61 72 65 20 6f 66 20 74 68 69 73 20 73 74 72  care of this str
d270: 75 63 74 75 72 65 2e 0a 2b 20 20 20 20 20 2a 2f  ucture..+     */
d280: 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65  .+.+    Tcl_Mute
d290: 78 4c 6f 63 6b 28 26 73 65 72 69 61 6c 4d 75 74  xLock(&serialMut
d2a0: 65 78 29 3b 0a 2b 20 20 20 20 69 66 20 28 61 63  ex);.+    if (ac
d2b0: 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41 4e  tion == TCL_CHAN
d2c0: 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45 52  NEL_THREAD_INSER
d2d0: 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 2f 2a  T) {.+        /*
d2e0: 20 57 65 20 63 61 6e 27 74 20 63 6f 70 79 20 74   We can't copy t
d2f0: 68 65 20 74 68 72 65 61 64 20 69 6e 66 6f 72 6d  he thread inform
d300: 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 63  ation from the c
d310: 68 61 6e 6e 65 6c 20 77 68 65 6e 0a 2b 09 20 2a  hannel when.+. *
d320: 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 69 73 20   the channel is 
d330: 63 72 65 61 74 65 64 2e 20 41 74 20 74 68 69 73  created. At this
d340: 20 74 69 6d 65 20 74 68 65 20 63 68 61 6e 6e 65   time the channe
d350: 6c 20 62 61 63 6b 0a 2b 09 20 2a 20 70 6f 69 6e  l back.+. * poin
d360: 74 65 72 20 68 61 73 20 6e 6f 74 20 62 65 65 6e  ter has not been
d370: 20 73 65 74 20 79 65 74 2e 20 48 6f 77 65 76 65   set yet. Howeve
d380: 72 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 74  r in that case t
d390: 68 65 0a 2b 09 20 2a 20 74 68 72 65 61 64 49 64  he.+. * threadId
d3a0: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
d3b0: 6e 20 73 65 74 20 62 79 20 54 63 6c 70 43 72 65  n set by TclpCre
d3c0: 61 74 65 43 6f 6d 6d 61 6e 64 43 68 61 6e 6e 65  ateCommandChanne
d3d0: 6c 0a 2b 09 20 2a 20 69 74 73 65 6c 66 2c 20 73  l.+. * itself, s
d3e0: 6f 20 74 68 65 20 73 74 72 75 63 74 75 72 65 20  o the structure 
d3f0: 69 73 20 73 74 69 6c 6c 20 67 6f 6f 64 2e 0a 2b  is still good..+
d400: 09 20 2a 2f 0a 2b 0a 2b 20 20 20 20 20 20 20 20  . */.+.+        
d410: 53 65 72 69 61 6c 49 6e 69 74 20 28 29 3b 0a 2b  SerialInit ();.+
d420: 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 66 6f          if (info
d430: 50 74 72 2d 3e 63 68 61 6e 6e 65 6c 20 21 3d 20  Ptr->channel != 
d440: 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 69 6e  NULL) {.+.    in
d450: 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 64 20  foPtr->threadId 
d460: 3d 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c  = Tcl_GetChannel
d470: 54 68 72 65 61 64 20 28 69 6e 66 6f 50 74 72 2d  Thread (infoPtr-
d480: 3e 63 68 61 6e 6e 65 6c 29 3b 0a 2b 09 7d 0a 2b  >channel);.+.}.+
d490: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 69      } else {.+.i
d4a0: 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 64  nfoPtr->threadId
d4b0: 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20 7d 0a   = NULL;.+    }.
d4c0: 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65 78 55 6e  +    Tcl_MutexUn
d4d0: 6c 6f 63 6b 28 26 73 65 72 69 61 6c 4d 75 74 65  lock(&serialMute
d4e0: 78 29 3b 0a 2b 7d 0a 49 6e 64 65 78 3a 20 77 69  x);.+}.Index: wi
d4f0: 6e 2f 74 63 6c 57 69 6e 53 6f 63 6b 2e 63 0a 3d  n/tclWinSock.c.=
d500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
d510: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
d520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
d530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
d540: 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76  ==.RCS file: /cv
d550: 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69  sroot/tcl/tcl/wi
d560: 6e 2f 74 63 6c 57 69 6e 53 6f 63 6b 2e 63 2c 76  n/tclWinSock.c,v
d570: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69  .retrieving revi
d580: 73 69 6f 6e 20 31 2e 33 36 2e 32 2e 32 0a 64 69  sion 1.36.2.2.di
d590: 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e 33 36 2e  ff -w -u -r1.36.
d5a0: 32 2e 32 20 74 63 6c 57 69 6e 53 6f 63 6b 2e 63  2.2 tclWinSock.c
d5b0: 0a 2d 2d 2d 20 77 69 6e 2f 74 63 6c 57 69 6e 53  .--- win/tclWinS
d5c0: 6f 63 6b 2e 63 09 36 20 4d 61 79 20 32 30 30 34  ock.c.6 May 2004
d5d0: 20 30 31 3a 30 33 3a 35 36 20 2d 30 30 30 30 09   01:03:56 -0000.
d5e0: 31 2e 33 36 2e 32 2e 32 0a 2b 2b 2b 20 77 69 6e  1.36.2.2.+++ win
d5f0: 2f 74 63 6c 57 69 6e 53 6f 63 6b 2e 63 09 32 37  /tclWinSock.c.27
d600: 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a   Jan 2005 22:49:
d610: 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 32 36 35  19 -0000.@@ -265
d620: 2c 36 20 2b 32 36 35 2c 31 30 20 40 40 0a 20 09  ,6 +265,10 @@. .
d630: 09 09 09 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64  ...int *errorCod
d640: 65 50 74 72 29 29 3b 0a 20 73 74 61 74 69 63 20  ePtr));. static 
d650: 44 57 4f 52 44 20 57 49 4e 41 50 49 09 20 20 20  DWORD WINAPI.   
d660: 20 53 6f 63 6b 65 74 54 68 72 65 61 64 20 5f 41   SocketThread _A
d670: 4e 53 49 5f 41 52 47 53 5f 28 28 4c 50 56 4f 49  NSI_ARGS_((LPVOI
d680: 44 20 61 72 67 29 29 3b 0a 20 0a 2b 73 74 61 74  D arg));. .+stat
d690: 69 63 20 76 6f 69 64 20 20 20 20 20 20 20 20 20  ic void         
d6a0: 20 20 20 20 54 63 70 54 68 72 65 61 64 41 63 74      TcpThreadAct
d6b0: 69 6f 6e 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52  ionProc _ANSI_AR
d6c0: 47 53 5f 20 28 28 0a 2b 09 09 09 20 20 20 43 6c  GS_ ((.+...   Cl
d6d0: 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63  ientData instanc
d6e0: 65 44 61 74 61 2c 20 69 6e 74 20 61 63 74 69 6f  eData, int actio
d6f0: 6e 29 29 3b 0a 2b 0a 2b 0a 20 2f 2a 0a 20 20 2a  n));.+.+. /*.  *
d700: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
d710: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 63 68  describes the ch
d720: 61 6e 6e 65 6c 20 74 79 70 65 20 73 74 72 75 63  annel type struc
d730: 74 75 72 65 20 66 6f 72 20 54 43 50 20 73 6f 63  ture for TCP soc
d740: 6b 65 74 0a 20 20 2a 20 62 61 73 65 64 20 49 4f  ket.  * based IO
d750: 2e 0a 40 40 20 2d 32 37 32 2c 37 20 2b 32 37 36  ..@@ -272,7 +276
d760: 2c 37 20 40 40 0a 20 0a 20 73 74 61 74 69 63 20  ,7 @@. . static 
d770: 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20  Tcl_ChannelType 
d780: 74 63 70 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d  tcpChannelType =
d790: 20 7b 0a 20 20 20 20 20 22 74 63 70 22 2c 09 09   {.     "tcp",..
d7a0: 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65      /* Type name
d7b0: 2e 20 2a 2f 0a 2d 20 20 20 20 54 43 4c 5f 43 48  . */.-    TCL_CH
d7c0: 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 2c  ANNEL_VERSION_2,
d7d0: 20 20 2f 2a 20 76 32 20 63 68 61 6e 6e 65 6c 20    /* v2 channel 
d7e0: 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43 48 41 4e  */.+    TCL_CHAN
d7f0: 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 2c 20 20  NEL_VERSION_4,  
d800: 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20 2a 2f  /* v4 channel */
d810: 0a 20 20 20 20 20 54 63 70 43 6c 6f 73 65 50 72  .     TcpClosePr
d820: 6f 63 2c 09 20 20 20 20 2f 2a 20 43 6c 6f 73 65  oc,.    /* Close
d830: 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 54   proc. */.     T
d840: 63 70 49 6e 70 75 74 50 72 6f 63 2c 09 20 20 20  cpInputProc,.   
d850: 20 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e 20   /* Input proc. 
d860: 2a 2f 0a 20 20 20 20 20 54 63 70 4f 75 74 70 75  */.     TcpOutpu
d870: 74 50 72 6f 63 2c 09 20 20 20 20 2f 2a 20 4f 75  tProc,.    /* Ou
d880: 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40  tput proc. */.@@
d890: 20 2d 32 38 35 2c 36 20 2b 32 38 39 2c 38 20 40   -285,6 +289,8 @
d8a0: 40 0a 20 20 20 20 20 54 63 70 42 6c 6f 63 6b 50  @.     TcpBlockP
d8b0: 72 6f 63 2c 09 20 20 20 20 2f 2a 20 53 65 74 20  roc,.    /* Set 
d8c0: 73 6f 63 6b 65 74 20 69 6e 74 6f 20 28 6e 6f 6e  socket into (non
d8d0: 2d 29 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e  -)blocking mode.
d8e0: 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09   */.     NULL,..
d8f0: 20 20 20 20 2f 2a 20 66 6c 75 73 68 20 70 72 6f      /* flush pro
d900: 63 2e 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c  c. */.     NULL,
d910: 09 09 20 20 20 20 2f 2a 20 68 61 6e 64 6c 65 72  ..    /* handler
d920: 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e   proc. */.+    N
d930: 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 20 20  ULL,            
d940: 20 20 20 20 20 20 20 2f 2a 20 77 69 64 65 20 73         /* wide s
d950: 65 65 6b 20 70 72 6f 63 20 2a 2f 0a 2b 20 20 20  eek proc */.+   
d960: 20 54 63 70 54 68 72 65 61 64 41 63 74 69 6f 6e   TcpThreadAction
d970: 50 72 6f 63 2c 20 20 20 20 2f 2a 20 74 68 72 65  Proc,    /* thre
d980: 61 64 20 61 63 74 69 6f 6e 20 70 72 6f 63 20 2a  ad action proc *
d990: 2f 0a 20 7d 3b 0a 20 0a 20 0c 0a 40 40 20 2d 39  /. };. . ..@@ -9
d9a0: 37 30 2c 37 20 2b 39 37 36 2c 37 20 40 40 0a 20  70,7 +976,7 @@. 
d9b0: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a      Tcl_Interp *
d9c0: 69 6e 74 65 72 70 3b 09 09 2f 2a 20 55 6e 75 73  interp;../* Unus
d9d0: 65 64 2e 20 2a 2f 0a 20 7b 0a 20 20 20 20 20 53  ed. */. {.     S
d9e0: 6f 63 6b 65 74 49 6e 66 6f 20 2a 69 6e 66 6f 50  ocketInfo *infoP
d9f0: 74 72 20 3d 20 28 53 6f 63 6b 65 74 49 6e 66 6f  tr = (SocketInfo
da00: 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 61 74 61   *) instanceData
da10: 3b 0a 2d 20 20 20 20 53 6f 63 6b 65 74 49 6e 66  ;.-    SocketInf
da20: 6f 20 2a 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a  o **nextPtrPtr;.
da30: 2b 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38  +    /* TIP #218
da40: 20 2a 2f 0a 20 20 20 20 20 69 6e 74 20 65 72 72   */.     int err
da50: 6f 72 43 6f 64 65 20 3d 20 30 3b 0a 20 20 20 20  orCode = 0;.    
da60: 20 54 68 72 65 61 64 53 70 65 63 69 66 69 63 44   ThreadSpecificD
da70: 61 74 61 20 2a 74 73 64 50 74 72 20 3d 20 54 43  ata *tsdPtr = TC
da80: 4c 5f 54 53 44 5f 49 4e 49 54 28 26 64 61 74 61  L_TSD_INIT(&data
da90: 4b 65 79 29 3b 0a 20 0a 40 40 20 2d 39 39 35 2c  Key);. .@@ -995,
daa0: 32 30 20 2b 31 30 30 31 2c 31 32 20 40 40 0a 20  20 +1001,12 @@. 
dab0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 7d          }.     }
dac0: 0a 20 0a 2d 20 20 20 20 2f 2a 0a 2d 20 20 20 20  . .-    /*.-    
dad0: 20 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 73 6f   * Remove the so
dae0: 63 6b 65 74 20 66 72 6f 6d 20 73 6f 63 6b 65 74  cket from socket
daf0: 4c 69 73 74 2e 0a 2b 20 20 20 20 2f 2a 20 54 49  List..+    /* TI
db00: 50 20 23 32 31 38 2e 20 52 65 6d 6f 76 65 64 20  P #218. Removed 
db10: 74 68 65 20 63 6f 64 65 20 72 65 6d 6f 76 69 6e  the code removin
db20: 67 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  g the structure.
db30: 2b 20 20 20 20 20 2a 20 66 72 6f 6d 20 74 68 65  +     * from the
db40: 20 67 6c 6f 62 61 6c 20 73 6f 63 6b 65 74 20 6c   global socket l
db50: 69 73 74 2e 20 54 68 69 73 20 69 73 20 6e 6f 77  ist. This is now
db60: 20 64 6f 6e 65 20 62 79 0a 2b 20 20 20 20 20 2a   done by.+     *
db70: 20 74 68 65 20 74 68 72 65 61 64 20 61 63 74 69   the thread acti
db80: 6f 6e 20 63 61 6c 6c 62 61 63 6b 73 2c 20 61 6e  on callbacks, an
db90: 64 20 6f 6e 6c 79 20 74 68 65 72 65 2e 20 54 68  d only there. Th
dba0: 69 73 0a 2b 20 20 20 20 20 2a 20 68 61 70 70 65  is.+     * happe
dbb0: 6e 73 20 62 65 66 6f 72 65 20 74 68 69 73 20 63  ns before this c
dbc0: 6f 64 65 20 69 73 20 63 61 6c 6c 65 64 2e 20 57  ode is called. W
dbd0: 65 20 63 61 6e 20 66 72 65 65 0a 2b 20 20 20 20  e can free.+    
dbe0: 20 2a 20 77 69 74 68 6f 75 74 20 66 65 61 72 20   * without fear 
dbf0: 6f 66 20 64 61 6d 61 6e 67 69 6e 67 20 74 68 65  of damanging the
dc00: 20 6c 69 73 74 2e 0a 20 20 20 20 20 20 2a 2f 0a   list..      */.
dc10: 2d 0a 2d 20 20 20 20 57 61 69 74 46 6f 72 53 69  -.-    WaitForSi
dc20: 6e 67 6c 65 4f 62 6a 65 63 74 28 74 73 64 50 74  ngleObject(tsdPt
dc30: 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f 63  r->socketListLoc
dc40: 6b 2c 20 49 4e 46 49 4e 49 54 45 29 3b 0a 2d 20  k, INFINITE);.- 
dc50: 20 20 20 66 6f 72 20 28 6e 65 78 74 50 74 72 50     for (nextPtrP
dc60: 74 72 20 3d 20 26 28 74 73 64 50 74 72 2d 3e 73  tr = &(tsdPtr->s
dc70: 6f 63 6b 65 74 4c 69 73 74 29 3b 20 28 2a 6e 65  ocketList); (*ne
dc80: 78 74 50 74 72 50 74 72 29 20 21 3d 20 4e 55 4c  xtPtrPtr) != NUL
dc90: 4c 3b 0a 2d 09 20 6e 65 78 74 50 74 72 50 74 72  L;.-. nextPtrPtr
dca0: 20 3d 20 26 28 28 2a 6e 65 78 74 50 74 72 50 74   = &((*nextPtrPt
dcb0: 72 29 2d 3e 6e 65 78 74 50 74 72 29 29 20 7b 0a  r)->nextPtr)) {.
dcc0: 2d 09 69 66 20 28 28 2a 6e 65 78 74 50 74 72 50  -.if ((*nextPtrP
dcd0: 74 72 29 20 3d 3d 20 69 6e 66 6f 50 74 72 29 20  tr) == infoPtr) 
dce0: 7b 0a 2d 09 20 20 20 20 28 2a 6e 65 78 74 50 74  {.-.    (*nextPt
dcf0: 72 50 74 72 29 20 3d 20 69 6e 66 6f 50 74 72 2d  rPtr) = infoPtr-
dd00: 3e 6e 65 78 74 50 74 72 3b 0a 2d 09 20 20 20 20  >nextPtr;.-.    
dd10: 62 72 65 61 6b 3b 0a 2d 09 7d 0a 2d 20 20 20 20  break;.-.}.-    
dd20: 7d 0a 2d 20 20 20 20 0a 2d 20 20 20 20 53 65 74  }.-    .-    Set
dd30: 45 76 65 6e 74 28 74 73 64 50 74 72 2d 3e 73 6f  Event(tsdPtr->so
dd40: 63 6b 65 74 4c 69 73 74 4c 6f 63 6b 29 3b 0a 20  cketListLock);. 
dd50: 20 20 20 20 63 6b 66 72 65 65 28 28 63 68 61 72      ckfree((char
dd60: 20 2a 29 20 69 6e 66 6f 50 74 72 29 3b 0a 20 20   *) infoPtr);.  
dd70: 20 20 20 72 65 74 75 72 6e 20 65 72 72 6f 72 43     return errorC
dd80: 6f 64 65 3b 0a 20 7d 0a 40 40 20 2d 31 30 32 35  ode;. }.@@ -1025
dd90: 2c 37 20 2b 31 30 32 33 2c 37 20 40 40 0a 20 20  ,7 +1023,7 @@.  
dda0: 2a 09 52 65 74 75 72 6e 73 20 61 20 6e 65 77 6c  *.Returns a newl
ddb0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 53 6f 63 6b  y allocated Sock
ddc0: 65 74 49 6e 66 6f 2e 0a 20 20 2a 0a 20 20 2a 20  etInfo..  *.  * 
ddd0: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2d 20  Side effects:.- 
dde0: 2a 09 41 64 64 73 20 74 68 65 20 73 6f 63 6b 65  *.Adds the socke
ddf0: 74 20 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20  t to the global 
de00: 73 6f 63 6b 65 74 20 6c 69 73 74 2e 0a 2b 20 2a  socket list..+ *
de10: 09 4e 6f 6e 65 2c 20 65 78 63 65 70 74 20 66 6f  .None, except fo
de20: 72 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  r allocation of 
de30: 6d 65 6d 6f 72 79 2e 0a 20 20 2a 0a 20 20 2a 2d  memory..  *.  *-
de40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
de50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
de60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
de70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
de80: 2d 2d 2d 2d 2d 0a 20 20 2a 2f 0a 40 40 20 2d 31  -----.  */.@@ -1
de90: 30 34 37 2c 31 30 20 2b 31 30 34 35 2c 31 31 20  047,10 +1045,11 
dea0: 40 40 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d  @@.     infoPtr-
deb0: 3e 61 63 63 65 70 74 50 72 6f 63 20 3d 20 4e 55  >acceptProc = NU
dec0: 4c 4c 3b 0a 20 20 20 20 20 69 6e 66 6f 50 74 72  LL;.     infoPtr
ded0: 2d 3e 6c 61 73 74 45 72 72 6f 72 20 3d 20 30 3b  ->lastError = 0;
dee0: 0a 20 0a 2d 20 20 20 20 57 61 69 74 46 6f 72 53  . .-    WaitForS
def0: 69 6e 67 6c 65 4f 62 6a 65 63 74 28 74 73 64 50  ingleObject(tsdP
df00: 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f  tr->socketListLo
df10: 63 6b 2c 20 49 4e 46 49 4e 49 54 45 29 3b 0a 2d  ck, INFINITE);.-
df20: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 6e 65 78      infoPtr->nex
df30: 74 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e 73  tPtr = tsdPtr->s
df40: 6f 63 6b 65 74 4c 69 73 74 3b 0a 2d 20 20 20 20  ocketList;.-    
df50: 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69  tsdPtr->socketLi
df60: 73 74 20 3d 20 69 6e 66 6f 50 74 72 3b 0a 2d 20  st = infoPtr;.- 
df70: 20 20 20 53 65 74 45 76 65 6e 74 28 74 73 64 50     SetEvent(tsdP
df80: 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f  tr->socketListLo
df90: 63 6b 29 3b 0a 2b 20 20 20 20 2f 2a 20 54 49 50  ck);.+    /* TIP
dfa0: 20 23 32 31 38 2e 20 52 65 6d 6f 76 65 64 20 74   #218. Removed t
dfb0: 68 65 20 63 6f 64 65 20 69 6e 73 65 72 74 69 6e  he code insertin
dfc0: 67 20 74 68 65 20 6e 65 77 20 73 74 72 75 63 74  g the new struct
dfd0: 75 72 65 0a 2b 20 20 20 20 20 2a 20 69 6e 74 6f  ure.+     * into
dfe0: 20 74 68 65 20 67 6c 6f 62 61 6c 20 6c 69 73 74   the global list
dff0: 2e 20 54 68 69 73 20 69 73 20 6e 6f 77 20 68 61  . This is now ha
e000: 6e 64 6c 65 64 20 69 6e 20 74 68 65 20 74 68 72  ndled in the thr
e010: 65 61 64 0a 2b 20 20 20 20 20 2a 20 61 63 74 69  ead.+     * acti
e020: 6f 6e 20 63 61 6c 6c 62 61 63 6b 73 2c 20 61 6e  on callbacks, an
e030: 64 20 6f 6e 6c 79 20 74 68 65 72 65 2e 0a 2b 20  d only there..+ 
e040: 20 20 20 20 2a 2f 0a 2b 20 20 20 20 69 6e 66 6f      */.+    info
e050: 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 4e  Ptr->nextPtr = N
e060: 55 4c 4c 3b 0a 20 20 20 20 20 0a 20 20 20 20 20  ULL;.     .     
e070: 72 65 74 75 72 6e 20 69 6e 66 6f 50 74 72 3b 0a  return infoPtr;.
e080: 20 7d 0a 40 40 20 2d 31 30 36 37 2c 37 20 2b 31   }.@@ -1067,7 +1
e090: 30 36 36 2c 37 20 40 40 0a 20 20 2a 09 52 65 74  066,7 @@.  *.Ret
e0a0: 75 72 6e 73 20 61 20 6e 65 77 20 53 6f 63 6b 65  urns a new Socke
e0b0: 74 49 6e 66 6f 2c 20 6f 72 20 4e 55 4c 4c 20 77  tInfo, or NULL w
e0c0: 69 74 68 20 61 6e 20 65 72 72 6f 72 20 69 6e 20  ith an error in 
e0d0: 69 6e 74 65 72 70 2e 0a 20 20 2a 0a 20 20 2a 20  interp..  *.  * 
e0e0: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2d 20  Side effects:.- 
e0f0: 2a 09 41 64 64 73 20 61 20 6e 65 77 20 73 6f 63  *.Adds a new soc
e100: 6b 65 74 20 74 6f 20 74 68 65 20 73 6f 63 6b 65  ket to the socke
e110: 74 4c 69 73 74 2e 0a 2b 20 2a 09 4e 6f 6e 65 2c  tList..+ *.None,
e120: 20 65 78 63 65 70 74 20 66 6f 72 20 61 6c 6c 6f   except for allo
e130: 63 61 74 69 6f 6e 20 6f 66 20 6d 65 6d 6f 72 79  cation of memory
e140: 2e 0a 20 20 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d  ..  *.  *-------
e150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
e160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
e170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
e180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
e190: 20 20 2a 2f 0a 40 40 20 2d 32 36 36 30 2c 34 20    */.@@ -2660,4 
e1a0: 2b 32 36 35 39 2c 38 34 20 40 40 0a 20 20 20 20  +2659,84 @@.    
e1b0: 20 72 65 74 75 72 6e 20 77 69 6e 53 6f 63 6b 2e   return winSock.
e1c0: 67 65 74 73 65 72 76 62 79 6e 61 6d 65 28 6e 61  getservbyname(na
e1d0: 6d 65 2c 20 70 72 6f 74 6f 29 3b 0a 20 7d 0a 20  me, proto);. }. 
e1e0: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .+/*.+ *--------
e1f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
e200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
e210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
e220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b  --------------.+
e230: 20 2a 0a 2b 20 2a 20 54 63 70 54 68 72 65 61 64   *.+ * TcpThread
e240: 41 63 74 69 6f 6e 50 72 6f 63 20 2d 2d 0a 2b 20  ActionProc --.+ 
e250: 2a 0a 2b 20 2a 09 49 6e 73 65 72 74 20 6f 72 20  *.+ *.Insert or 
e260: 72 65 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61  remove any threa
e270: 64 20 6c 6f 63 61 6c 20 72 65 66 73 20 74 6f 20  d local refs to 
e280: 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 2b 20  this channel..+ 
e290: 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b  *.+ * Results:.+
e2a0: 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a   *.None..+ *.+ *
e2b0: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b   Side effects:.+
e2c0: 20 2a 09 43 68 61 6e 67 65 73 20 74 68 72 65 61   *.Changes threa
e2d0: 64 20 6c 6f 63 61 6c 20 6c 69 73 74 20 6f 66 20  d local list of 
e2e0: 76 61 6c 69 64 20 63 68 61 6e 6e 65 6c 73 2e 0a  valid channels..
e2f0: 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  + *.+ *---------
e300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
e310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
e320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
e330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20  -------------.+ 
e340: 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 76 6f 69  */.+.+static voi
e350: 64 0a 2b 54 63 70 54 68 72 65 61 64 41 63 74 69  d.+TcpThreadActi
e360: 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 6e 63 65  onProc (instance
e370: 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 0a 2b 20  Data, action).+ 
e380: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69      ClientData i
e390: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20  nstanceData;.+  
e3a0: 20 20 20 69 6e 74 20 61 63 74 69 6f 6e 3b 0a 2b     int action;.+
e3b0: 7b 0a 2b 20 20 20 20 54 68 72 65 61 64 53 70 65  {.+    ThreadSpe
e3c0: 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 50 74  cificData *tsdPt
e3d0: 72 3b 0a 2b 20 20 20 20 53 6f 63 6b 65 74 49 6e  r;.+    SocketIn
e3e0: 66 6f 20 2a 69 6e 66 6f 50 74 72 20 3d 20 28 53  fo *infoPtr = (S
e3f0: 6f 63 6b 65 74 49 6e 66 6f 20 2a 29 20 69 6e 73  ocketInfo *) ins
e400: 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20 20 20  tanceData;.+    
e410: 69 6e 74 20 20 20 20 20 20 6e 6f 74 69 66 79 43  int      notifyC
e420: 6d 64 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 61  md;.+.+    if (a
e430: 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41  ction == TCL_CHA
e440: 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45  NNEL_THREAD_INSE
e450: 52 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 2f  RT) {.+        /
e460: 2a 0a 2b 09 20 2a 20 45 6e 73 75 72 65 20 74 68  *.+. * Ensure th
e470: 61 74 20 73 6f 63 6b 65 74 20 73 75 62 73 79 73  at socket subsys
e480: 74 65 6d 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  tem is initializ
e490: 65 64 20 69 6e 20 74 68 69 73 20 74 68 72 65 61  ed in this threa
e4a0: 64 2c 20 6f 72 0a 2b 09 20 2a 20 65 6c 73 65 20  d, or.+. * else 
e4b0: 73 6f 63 6b 65 74 73 20 77 69 6c 6c 20 6e 6f 74  sockets will not
e4c0: 20 77 6f 72 6b 2e 0a 2b 09 20 2a 2f 0a 2b 0a 2b   work..+. */.+.+
e4d0: 20 20 20 20 20 20 20 20 54 63 6c 5f 4d 75 74 65          Tcl_Mute
e4e0: 78 4c 6f 63 6b 28 26 73 6f 63 6b 65 74 4d 75 74  xLock(&socketMut
e4f0: 65 78 29 3b 0a 2b 09 49 6e 69 74 53 6f 63 6b 65  ex);.+.InitSocke
e500: 74 73 28 29 3b 0a 2b 09 54 63 6c 5f 4d 75 74 65  ts();.+.Tcl_Mute
e510: 78 55 6e 6c 6f 63 6b 28 26 73 6f 63 6b 65 74 4d  xUnlock(&socketM
e520: 75 74 65 78 29 3b 0a 2b 0a 2b 09 74 73 64 50 74  utex);.+.+.tsdPt
e530: 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54  r = TCL_TSD_INIT
e540: 28 26 64 61 74 61 4b 65 79 29 3b 0a 2b 0a 2b 09  (&dataKey);.+.+.
e550: 57 61 69 74 46 6f 72 53 69 6e 67 6c 65 4f 62 6a  WaitForSingleObj
e560: 65 63 74 28 74 73 64 50 74 72 2d 3e 73 6f 63 6b  ect(tsdPtr->sock
e570: 65 74 4c 69 73 74 4c 6f 63 6b 2c 20 49 4e 46 49  etListLock, INFI
e580: 4e 49 54 45 29 3b 0a 2b 09 69 6e 66 6f 50 74 72  NITE);.+.infoPtr
e590: 2d 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64 50  ->nextPtr = tsdP
e5a0: 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 3b 0a  tr->socketList;.
e5b0: 2b 09 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74  +.tsdPtr->socket
e5c0: 4c 69 73 74 20 3d 20 69 6e 66 6f 50 74 72 3b 0a  List = infoPtr;.
e5d0: 2b 09 53 65 74 45 76 65 6e 74 28 74 73 64 50 74  +.SetEvent(tsdPt
e5e0: 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f 63  r->socketListLoc
e5f0: 6b 29 3b 0a 2b 0a 2b 09 6e 6f 74 69 66 79 43 6d  k);.+.+.notifyCm
e600: 64 20 3d 20 53 45 4c 45 43 54 3b 0a 2b 20 20 20  d = SELECT;.+   
e610: 20 7d 20 65 6c 73 65 20 7b 0a 2b 20 20 20 20 20   } else {.+     
e620: 20 20 20 53 6f 63 6b 65 74 49 6e 66 6f 20 2a 2a     SocketInfo **
e630: 6e 65 78 74 50 74 72 50 74 72 3b 0a 2b 09 69 6e  nextPtrPtr;.+.in
e640: 74 20 72 65 6d 6f 76 65 64 20 3d 20 30 3b 0a 2b  t removed = 0;.+
e650: 0a 2b 09 74 73 64 50 74 72 20 20 3d 20 54 43 4c  .+.tsdPtr  = TCL
e660: 5f 54 53 44 5f 49 4e 49 54 28 26 64 61 74 61 4b  _TSD_INIT(&dataK
e670: 65 79 29 3b 0a 2b 0a 2b 09 2f 2a 20 54 49 50 20  ey);.+.+./* TIP 
e680: 23 32 31 38 2c 20 42 75 67 66 69 78 3a 20 41 6c  #218, Bugfix: Al
e690: 6c 20 61 63 63 65 73 73 20 74 6f 20 73 6f 63 6b  l access to sock
e6a0: 65 74 4c 69 73 74 20 68 61 73 20 74 6f 20 62 65  etList has to be
e6b0: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
e6c0: 65 20 6c 6f 63 6b 20 2a 2f 0a 2b 09 57 61 69 74  e lock */.+.Wait
e6d0: 46 6f 72 53 69 6e 67 6c 65 4f 62 6a 65 63 74 28  ForSingleObject(
e6e0: 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69  tsdPtr->socketLi
e6f0: 73 74 4c 6f 63 6b 2c 20 49 4e 46 49 4e 49 54 45  stLock, INFINITE
e700: 29 3b 0a 2b 09 66 6f 72 20 28 6e 65 78 74 50 74  );.+.for (nextPt
e710: 72 50 74 72 20 3d 20 26 28 74 73 64 50 74 72 2d  rPtr = &(tsdPtr-
e720: 3e 73 6f 63 6b 65 74 4c 69 73 74 29 3b 20 28 2a  >socketList); (*
e730: 6e 65 78 74 50 74 72 50 74 72 29 20 21 3d 20 4e  nextPtrPtr) != N
e740: 55 4c 4c 3b 0a 2b 09 20 20 20 20 20 6e 65 78 74  ULL;.+.     next
e750: 50 74 72 50 74 72 20 3d 20 26 28 28 2a 6e 65 78  PtrPtr = &((*nex
e760: 74 50 74 72 50 74 72 29 2d 3e 6e 65 78 74 50 74  tPtrPtr)->nextPt
e770: 72 29 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28  r)) {.+.    if (
e780: 28 2a 6e 65 78 74 50 74 72 50 74 72 29 20 3d 3d  (*nextPtrPtr) ==
e790: 20 69 6e 66 6f 50 74 72 29 20 7b 0a 2b 09 20 20   infoPtr) {.+.  
e7a0: 20 20 20 20 20 20 28 2a 6e 65 78 74 50 74 72 50        (*nextPtrP
e7b0: 74 72 29 20 3d 20 69 6e 66 6f 50 74 72 2d 3e 6e  tr) = infoPtr->n
e7c0: 65 78 74 50 74 72 3b 0a 2b 09 09 72 65 6d 6f 76  extPtr;.+..remov
e7d0: 65 64 20 3d 20 31 3b 0a 2b 09 09 62 72 65 61 6b  ed = 1;.+..break
e7e0: 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 7d 0a 2b 09  ;.+.    }.+.}.+.
e7f0: 53 65 74 45 76 65 6e 74 28 74 73 64 50 74 72 2d  SetEvent(tsdPtr-
e800: 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f 63 6b 29  >socketListLock)
e810: 3b 0a 2b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 54 68  ;.+.+./*.+. * Th
e820: 69 73 20 63 6f 75 6c 64 20 68 61 70 70 65 6e 20  is could happen 
e830: 69 66 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 77  if the channel w
e840: 61 73 20 63 72 65 61 74 65 64 20 69 6e 20 6f 6e  as created in on
e850: 65 20 74 68 72 65 61 64 0a 2b 09 20 2a 20 61 6e  e thread.+. * an
e860: 64 20 74 68 65 6e 20 6d 6f 76 65 64 20 74 6f 20  d then moved to 
e870: 61 6e 6f 74 68 65 72 20 77 69 74 68 6f 75 74 20  another without 
e880: 75 70 64 61 74 69 6e 67 20 74 68 65 20 74 68 72  updating the thr
e890: 65 61 64 0a 2b 09 20 2a 20 6c 6f 63 61 6c 20 64  ead.+. * local d
e8a0: 61 74 61 20 69 6e 20 65 61 63 68 20 74 68 72 65  ata in each thre
e8b0: 61 64 2e 0a 2b 09 20 2a 2f 0a 20 0a 2b 09 69 66  ad..+. */. .+.if
e8c0: 20 28 21 72 65 6d 6f 76 65 64 29 20 7b 0a 2b 09   (!removed) {.+.
e8d0: 20 20 20 20 54 63 6c 5f 50 61 6e 69 63 28 22 66      Tcl_Panic("f
e8e0: 69 6c 65 20 69 6e 66 6f 20 70 74 72 20 6e 6f 74  ile info ptr not
e8f0: 20 6f 6e 20 74 68 72 65 61 64 20 63 68 61 6e 6e   on thread chann
e900: 65 6c 20 6c 69 73 74 22 29 3b 0a 2b 09 7d 0a 2b  el list");.+.}.+
e910: 0a 2b 09 6e 6f 74 69 66 79 43 6d 64 20 3d 20 55  .+.notifyCmd = U
e920: 4e 53 45 4c 45 43 54 3b 0a 2b 20 20 20 20 7d 0a  NSELECT;.+    }.
e930: 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20  +.+    /*.+     
e940: 2a 20 45 6e 73 75 72 65 20 74 68 61 74 2c 20 6f  * Ensure that, o
e950: 72 20 73 74 6f 70 2c 20 6e 6f 74 69 66 69 63 61  r stop, notifica
e960: 74 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 73 6f  tions for the so
e970: 63 6b 65 74 20 6f 63 63 75 72 20 69 6e 20 74 68  cket occur in th
e980: 69 73 20 74 68 72 65 61 64 2e 0a 2b 20 20 20 20  is thread..+    
e990: 20 2a 2f 0a 2b 0a 2b 20 20 20 20 53 65 6e 64 4d   */.+.+    SendM
e9a0: 65 73 73 61 67 65 28 74 73 64 50 74 72 2d 3e 68  essage(tsdPtr->h
e9b0: 77 6e 64 2c 20 53 4f 43 4b 45 54 5f 53 45 4c 45  wnd, SOCKET_SELE
e9c0: 43 54 2c 0a 2b 09 09 28 57 50 41 52 41 4d 29 20  CT,.+..(WPARAM) 
e9d0: 6e 6f 74 69 66 79 43 6d 64 2c 20 28 4c 50 41 52  notifyCmd, (LPAR
e9e0: 41 4d 29 20 69 6e 66 6f 50 74 72 29 3b 0a 2b 7d  AM) infoPtr);.+}
e9f0: 0a                                               .