Attachment "RestrictedDDE.patch" to
ticket [649859ffff]
added by
patthoyts
2002-12-07 08:07:01.
0000: 49 6e 64 65 78 3a 20 74 63 6c 57 69 6e 44 64 65 Index: tclWinDde
0010: 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .c..============
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 0d 0a 52 43 53 20 66 69 6c =======..RCS fil
0060: 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f e: /cvsroot/tcl/
0070: 74 63 6c 2f 77 69 6e 2f 74 63 6c 57 69 6e 44 64 tcl/win/tclWinDd
0080: 65 2e 63 2c 76 0d 0a 72 65 74 72 69 65 76 69 6e e.c,v..retrievin
0090: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 38 0d 0a g revision 1.8..
00a0: 64 69 66 66 20 2d 63 20 2d 72 31 2e 38 20 74 63 diff -c -r1.8 tc
00b0: 6c 57 69 6e 44 64 65 2e 63 0d 0a 2a 2a 2a 20 74 lWinDde.c..*** t
00c0: 63 6c 57 69 6e 44 64 65 2e 63 09 31 38 20 4a 61 clWinDde.c.18 Ja
00d0: 6e 20 32 30 30 32 20 31 34 3a 30 37 3a 34 30 20 n 2002 14:07:40
00e0: 2d 30 30 30 30 09 31 2e 38 0d 0a 2d 2d 2d 20 74 -0000.1.8..--- t
00f0: 63 6c 57 69 6e 44 64 65 2e 63 09 37 20 44 65 63 clWinDde.c.7 Dec
0100: 20 32 30 30 32 20 30 30 3a 35 36 3a 34 33 20 2d 2002 00:56:43 -
0110: 30 30 30 30 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0000..**********
0120: 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 33 35 2c 34 30 *****..*** 35,40
0130: 20 2a 2a 2a 2a 0d 0a 2d 2d 2d 20 33 35 2c 34 31 ****..--- 35,41
0140: 20 2d 2d 2d 2d 0d 0a 20 20 09 09 09 09 2f 2a 20 ----.. ..../*
0150: 54 68 65 20 6e 65 78 74 20 69 6e 74 65 72 70 20 The next interp
0160: 74 68 69 73 20 61 70 70 6c 69 63 61 74 69 6f 6e this application
0170: 20 6b 6e 6f 77 73 0d 0a 20 20 09 09 09 09 20 2a knows.. .... *
0180: 20 61 62 6f 75 74 2e 20 2a 2f 0d 0a 20 20 20 20 about. */..
0190: 20 20 63 68 61 72 20 2a 6e 61 6d 65 3b 09 09 09 char *name;...
01a0: 2f 2a 20 49 6e 74 65 72 70 72 65 74 65 72 27 73 /* Interpreter's
01b0: 20 6e 61 6d 65 20 28 6d 61 6c 6c 6f 63 2d 65 64 name (malloc-ed
01c0: 29 2e 20 2a 2f 0d 0a 2b 20 20 20 20 20 54 63 6c ). */..+ Tcl
01d0: 5f 4f 62 6a 20 2a 68 61 6e 64 6c 65 72 50 74 72 _Obj *handlerPtr
01e0: 3b 09 2f 2a 20 54 68 65 20 73 65 72 76 65 72 20 ;./* The server
01f0: 68 61 6e 64 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 handler command
0200: 2a 2f 0d 0a 20 20 20 20 20 20 54 63 6c 5f 49 6e */.. Tcl_In
0210: 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f terp *interp;../
0220: 2a 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 65 * The interprete
0230: 72 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 r attached to th
0240: 69 73 20 6e 61 6d 65 2e 20 2a 2f 0d 0a 20 20 7d is name. */.. }
0250: 20 52 65 67 69 73 74 65 72 65 64 49 6e 74 65 72 RegisteredInter
0260: 70 3b 0d 0a 20 20 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a p;.. ..********
0270: 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 39 37 2c *******..*** 97,
0280: 31 30 32 20 2a 2a 2a 2a 0d 0a 2d 2d 2d 20 39 38 102 ****..--- 98
0290: 2c 31 30 34 20 2d 2d 2d 2d 0d 0a 20 20 09 54 63 ,104 ----.. .Tc
02a0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a l_Obj *CONST obj
02b0: 76 5b 5d 29 3b 09 2f 2a 20 54 68 65 20 61 72 67 v[]);./* The arg
02c0: 75 6d 65 6e 74 73 20 2a 2f 0d 0a 20 20 0d 0a 20 uments */.. ..
02d0: 20 45 58 54 45 52 4e 20 69 6e 74 20 44 64 65 5f EXTERN int Dde_
02e0: 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 Init(Tcl_Interp
02f0: 2a 69 6e 74 65 72 70 29 3b 0d 0a 2b 20 45 58 54 *interp);..+ EXT
0300: 45 52 4e 20 69 6e 74 20 44 64 65 5f 53 61 66 65 ERN int Dde_Safe
0310: 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 Init(Tcl_Interp
0320: 2a 69 6e 74 65 72 70 29 3b 0d 0a 20 20 0c 0d 0a *interp);.. ...
0330: 20 20 2f 2a 0d 0a 20 20 20 2a 2d 2d 2d 2d 2d 2d /*.. *------
0340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0380: 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ..**************
0390: 2a 0d 0a 2a 2a 2a 20 31 33 39 2c 31 34 34 20 2a *..*** 139,144 *
03a0: 2a 2a 2a 0d 0a 2d 2d 2d 20 31 34 31 2c 31 37 32 ***..--- 141,172
03b0: 20 2d 2d 2d 2d 0d 0a 20 20 20 20 20 20 72 65 74 ----.. ret
03c0: 75 72 6e 20 54 63 6c 5f 50 6b 67 50 72 6f 76 69 urn Tcl_PkgProvi
03d0: 64 65 28 69 6e 74 65 72 70 2c 20 54 43 4c 5f 44 de(interp, TCL_D
03e0: 44 45 5f 50 41 43 4b 41 47 45 5f 4e 41 4d 45 2c DE_PACKAGE_NAME,
03f0: 20 54 43 4c 5f 44 44 45 5f 56 45 52 53 49 4f 4e TCL_DDE_VERSION
0400: 29 3b 0d 0a 20 20 7d 0d 0a 20 20 0c 0d 0a 2b 20 );.. }.. ...+
0410: 2f 2a 0d 0a 2b 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d /*..+ *--------
0420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a --------------..
0460: 2b 20 20 2a 0d 0a 2b 20 20 2a 20 44 64 65 5f 53 + *..+ * Dde_S
0470: 61 66 65 49 6e 69 74 20 2d 2d 0d 0a 2b 20 20 2a afeInit --..+ *
0480: 0d 0a 2b 20 20 2a 09 54 68 69 73 20 70 72 6f 63 ..+ *.This proc
0490: 65 64 75 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 edure initialize
04a0: 73 20 74 68 65 20 64 64 65 20 63 6f 6d 6d 61 6e s the dde comman
04b0: 64 20 77 69 74 68 69 6e 20 61 20 73 61 66 65 20 d within a safe
04c0: 69 6e 74 65 72 70 0d 0a 2b 20 20 2a 0d 0a 2b 20 interp..+ *..+
04d0: 20 2a 20 52 65 73 75 6c 74 73 3a 0d 0a 2b 20 20 * Results:..+
04e0: 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54 63 6c *.A standard Tcl
04f0: 20 72 65 73 75 6c 74 2e 0d 0a 2b 20 20 2a 0d 0a result...+ *..
0500: 2b 20 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 + * Side effect
0510: 73 3a 0d 0a 2b 20 20 2a 09 4e 6f 6e 65 2e 0d 0a s:..+ *.None...
0520: 2b 20 20 2a 0d 0a 2b 20 20 2a 2d 2d 2d 2d 2d 2d + *..+ *------
0530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0570: 0d 0a 2b 20 20 2a 2f 0d 0a 2b 20 0d 0a 2b 20 69 ..+ */..+ ..+ i
0580: 6e 74 0d 0a 2b 20 44 64 65 5f 53 61 66 65 49 6e nt..+ Dde_SafeIn
0590: 69 74 28 0d 0a 2b 20 20 20 20 20 54 63 6c 5f 49 it(..+ Tcl_I
05a0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 0d 0a nterp *interp)..
05b0: 2b 20 7b 0d 0a 2b 20 20 20 20 20 69 6e 74 20 72 + {..+ int r
05c0: 65 73 75 6c 74 20 3d 20 44 64 65 5f 49 6e 69 74 esult = Dde_Init
05d0: 28 69 6e 74 65 72 70 29 3b 0d 0a 2b 20 20 20 20 (interp);..+
05e0: 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 54 if (result == T
05f0: 43 4c 5f 4f 4b 29 20 7b 0d 0a 2b 20 09 54 63 6c CL_OK) {..+ .Tcl
0600: 5f 48 69 64 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 _HideCommand(int
0610: 65 72 70 2c 20 22 64 64 65 22 2c 20 22 64 64 65 erp, "dde", "dde
0620: 22 29 3b 0d 0a 2b 20 20 20 20 20 7d 0d 0a 2b 20 ");..+ }..+
0630: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c return resul
0640: 74 3b 0d 0a 2b 20 7d 0d 0a 20 20 0c 0d 0a 20 20 t;..+ }.. ...
0650: 2f 2a 0d 0a 20 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d /*.. *--------
0660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a --------------..
06a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d ***************.
06b0: 0a 2a 2a 2a 20 32 33 33 2c 32 34 32 20 2a 2a 2a .*** 233,242 ***
06c0: 2a 0d 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 *.. static char
06d0: 20 2a 0d 0a 20 20 44 64 65 53 65 74 53 65 72 76 *.. DdeSetServ
06e0: 65 72 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 54 erName(.. T
06f0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
0700: 70 2c 0d 0a 21 20 20 20 20 20 63 68 61 72 20 2a p,..! char *
0710: 6e 61 6d 65 09 09 09 2f 2a 20 54 68 65 20 6e 61 name.../* The na
0720: 6d 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 me that will be
0730: 75 73 65 64 20 74 6f 0d 0a 20 20 09 09 09 09 20 used to.. ....
0740: 2a 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 69 * refer to the i
0750: 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20 6c 61 nterpreter in la
0760: 74 65 72 0d 0a 20 20 09 09 09 09 20 2a 20 22 73 ter.. .... * "s
0770: 65 6e 64 22 20 63 6f 6d 6d 61 6e 64 73 2e 20 20 end" commands.
0780: 4d 75 73 74 20 62 65 20 67 6c 6f 62 61 6c 6c 79 Must be globally
0790: 0d 0a 20 20 09 09 09 09 20 2a 20 75 6e 69 71 75 .. .... * uniqu
07a0: 65 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 29 0d 0a e. */.. )..
07b0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 73 {.. int s
07c0: 75 66 66 69 78 2c 20 6f 66 66 73 65 74 3b 0d 0a uffix, offset;..
07d0: 2d 2d 2d 20 32 36 31 2c 32 37 32 20 2d 2d 2d 2d --- 261,272 ----
07e0: 0d 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20 .. static char
07f0: 2a 0d 0a 20 20 44 64 65 53 65 74 53 65 72 76 65 *.. DdeSetServe
0800: 72 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 54 63 rName(.. Tc
0810: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
0820: 2c 0d 0a 21 20 20 20 20 20 63 68 61 72 20 2a 6e ,..! char *n
0830: 61 6d 65 2c 09 09 09 2f 2a 20 54 68 65 20 6e 61 ame,.../* The na
0840: 6d 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 me that will be
0850: 75 73 65 64 20 74 6f 0d 0a 20 20 09 09 09 09 20 used to.. ....
0860: 2a 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 69 * refer to the i
0870: 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20 6c 61 nterpreter in la
0880: 74 65 72 0d 0a 20 20 09 09 09 09 20 2a 20 22 73 ter.. .... * "s
0890: 65 6e 64 22 20 63 6f 6d 6d 61 6e 64 73 2e 20 20 end" commands.
08a0: 4d 75 73 74 20 62 65 20 67 6c 6f 62 61 6c 6c 79 Must be globally
08b0: 0d 0a 20 20 09 09 09 09 20 2a 20 75 6e 69 71 75 .. .... * uniqu
08c0: 65 2e 20 2a 2f 0d 0a 2b 20 20 20 20 20 54 63 6c e. */..+ Tcl
08d0: 5f 4f 62 6a 20 2a 68 61 6e 64 6c 65 72 50 74 72 _Obj *handlerPtr
08e0: 09 09 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 ../* Name of the
08f0: 20 6f 70 74 69 6f 6e 61 6c 20 70 72 6f 63 2f 63 optional proc/c
0900: 6f 6d 6d 61 6e 64 20 74 6f 20 68 61 6e 64 6c 65 ommand to handle
0910: 0d 0a 2b 20 09 09 09 09 20 2a 20 69 6e 63 6f 6d ..+ .... * incom
0920: 69 6e 67 20 44 64 65 20 65 76 61 6c 27 73 20 2a ing Dde eval's *
0930: 2f 0d 0a 20 20 20 20 20 20 29 0d 0a 20 20 7b 0d /.. ).. {.
0940: 0a 20 20 20 20 20 20 69 6e 74 20 73 75 66 66 69 . int suffi
0950: 78 2c 20 6f 66 66 73 65 74 3b 0d 0a 2a 2a 2a 2a x, offset;..****
0960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a ***********..***
0970: 20 33 30 30 2c 33 30 38 20 2a 2a 2a 2a 0d 0a 2d 300,308 ****..-
0980: 2d 2d 20 33 33 30 2c 33 34 35 20 2d 2d 2d 2d 0d -- 330,345 ----.
0990: 0a 20 20 20 20 20 20 72 69 50 74 72 2d 3e 69 6e . riPtr->in
09a0: 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0d 0a terp = interp;..
09b0: 20 20 20 20 20 20 72 69 50 74 72 2d 3e 6e 61 6d riPtr->nam
09c0: 65 20 3d 20 63 6b 61 6c 6c 6f 63 28 73 74 72 6c e = ckalloc(strl
09d0: 65 6e 28 6e 61 6d 65 29 20 2b 20 31 29 3b 0d 0a en(name) + 1);..
09e0: 20 20 20 20 20 20 72 69 50 74 72 2d 3e 6e 65 78 riPtr->nex
09f0: 74 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e 69 tPtr = tsdPtr->i
0a00: 6e 74 65 72 70 4c 69 73 74 50 74 72 3b 0d 0a 2b nterpListPtr;..+
0a10: 20 20 20 20 20 72 69 50 74 72 2d 3e 68 61 6e 64 riPtr->hand
0a20: 6c 65 72 50 74 72 20 3d 20 68 61 6e 64 6c 65 72 lerPtr = handler
0a30: 50 74 72 3b 0d 0a 2b 20 20 20 20 20 69 66 20 28 Ptr;..+ if (
0a40: 72 69 50 74 72 2d 3e 68 61 6e 64 6c 65 72 50 74 riPtr->handlerPt
0a50: 72 20 21 3d 20 4e 55 4c 4c 29 0d 0a 2b 20 09 54 r != NULL)..+ .T
0a60: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 cl_IncrRefCount(
0a70: 72 69 50 74 72 2d 3e 68 61 6e 64 6c 65 72 50 74 riPtr->handlerPt
0a80: 72 29 3b 0d 0a 20 20 20 20 20 20 74 73 64 50 74 r);.. tsdPt
0a90: 72 2d 3e 69 6e 74 65 72 70 4c 69 73 74 50 74 72 r->interpListPtr
0aa0: 20 3d 20 72 69 50 74 72 3b 0d 0a 20 20 20 20 20 = riPtr;..
0ab0: 20 73 74 72 63 70 79 28 72 69 50 74 72 2d 3e 6e strcpy(riPtr->n
0ac0: 61 6d 65 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 0d ame, name);.. .
0ad0: 0a 2b 20 20 20 20 20 69 66 20 28 54 63 6c 5f 49 .+ if (Tcl_I
0ae0: 73 53 61 66 65 28 69 6e 74 65 72 70 29 29 20 7b sSafe(interp)) {
0af0: 0d 0a 2b 20 09 54 63 6c 5f 45 78 70 6f 73 65 43 ..+ .Tcl_ExposeC
0b00: 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 ommand(interp, "
0b10: 64 64 65 22 2c 20 22 64 64 65 22 29 3b 0d 0a 2b dde", "dde");..+
0b20: 20 20 20 20 20 7d 0d 0a 2b 20 0d 0a 20 20 20 20 }..+ ..
0b30: 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 Tcl_CreateObjC
0b40: 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 ommand(interp, "
0b50: 64 64 65 22 2c 20 54 63 6c 5f 44 64 65 4f 62 6a dde", Tcl_DdeObj
0b60: 43 6d 64 2c 0d 0a 20 20 09 20 20 20 20 28 43 6c Cmd,.. . (Cl
0b70: 69 65 6e 74 44 61 74 61 29 20 72 69 50 74 72 2c ientData) riPtr,
0b80: 20 44 65 6c 65 74 65 50 72 6f 63 29 3b 0d 0a 20 DeleteProc);..
0b90: 20 20 20 20 20 69 66 20 28 54 63 6c 5f 49 73 53 if (Tcl_IsS
0ba0: 61 66 65 28 69 6e 74 65 72 70 29 29 20 7b 0d 0a afe(interp)) {..
0bb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d ***************.
0bc0: 0a 2a 2a 2a 20 33 32 31 2c 33 32 36 20 2a 2a 2a .*** 321,326 ***
0bd0: 2a 0d 0a 2d 2d 2d 20 33 35 38 2c 33 39 35 20 2d *..--- 358,395 -
0be0: 2d 2d 2d 0d 0a 20 20 2f 2a 0d 0a 20 20 20 2a 2d ---.. /*.. *-
0bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 -------------..
0c30: 20 20 2a 0d 0a 2b 20 20 2a 20 44 64 65 47 65 74 *..+ * DdeGet
0c40: 52 65 67 69 73 74 72 61 74 69 6f 6e 50 74 72 0d RegistrationPtr.
0c50: 0a 2b 20 20 2a 0d 0a 2b 20 20 2a 09 52 65 74 72 .+ *..+ *.Retr
0c60: 69 65 76 65 20 74 68 65 20 72 65 67 69 73 74 72 ieve the registr
0c70: 61 74 69 6f 6e 20 69 6e 66 6f 20 66 6f 72 20 61 ation info for a
0c80: 6e 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a n interpreter...
0c90: 2b 20 20 2a 0d 0a 2b 20 20 2a 20 52 65 73 75 6c + *..+ * Resul
0ca0: 74 73 3a 0d 0a 2b 20 20 2a 09 52 65 74 75 72 6e ts:..+ *.Return
0cb0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 s a pointer to t
0cc0: 68 65 20 72 65 67 69 73 74 72 61 74 69 6f 6e 20 he registration
0cd0: 73 74 72 75 63 74 75 72 65 20 6f 72 20 4e 55 4c structure or NUL
0ce0: 4c 0d 0a 2b 20 20 2a 0d 0a 2b 20 20 2a 20 53 69 L..+ *..+ * Si
0cf0: 64 65 20 65 66 66 65 63 74 73 3a 0d 0a 2b 20 20 de effects:..+
0d00: 2a 09 4e 6f 6e 65 0d 0a 2b 20 20 2a 0d 0a 2b 20 *.None..+ *..+
0d10: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
0d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d50: 0d 0a 2b 20 20 2a 2f 0d 0a 2b 20 73 74 61 74 69 ..+ */..+ stati
0d60: 63 20 52 65 67 69 73 74 65 72 65 64 49 6e 74 65 c RegisteredInte
0d70: 72 70 20 2a 0d 0a 2b 20 44 64 65 47 65 74 52 65 rp *..+ DdeGetRe
0d80: 67 69 73 74 72 61 74 69 6f 6e 50 74 72 28 0d 0a gistrationPtr(..
0d90: 2b 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 + Tcl_Interp
0da0: 20 2a 69 6e 74 65 72 70 0d 0a 2b 20 20 20 20 20 *interp..+
0db0: 29 0d 0a 2b 20 7b 0d 0a 2b 20 20 20 20 20 52 65 )..+ {..+ Re
0dc0: 67 69 73 74 65 72 65 64 49 6e 74 65 72 70 20 2a gisteredInterp *
0dd0: 72 69 50 74 72 3b 0d 0a 2b 20 20 20 20 20 54 68 riPtr;..+ Th
0de0: 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74 61 readSpecificData
0df0: 20 2a 74 73 64 50 74 72 20 3d 20 54 43 4c 5f 54 *tsdPtr = TCL_T
0e00: 53 44 5f 49 4e 49 54 28 26 64 61 74 61 4b 65 79 SD_INIT(&dataKey
0e10: 29 3b 0d 0a 2b 20 0d 0a 2b 20 20 20 20 20 66 6f );..+ ..+ fo
0e20: 72 20 28 72 69 50 74 72 20 3d 20 74 73 64 50 74 r (riPtr = tsdPt
0e30: 72 2d 3e 69 6e 74 65 72 70 4c 69 73 74 50 74 72 r->interpListPtr
0e40: 3b 20 72 69 50 74 72 20 21 3d 20 4e 55 4c 4c 3b ; riPtr != NULL;
0e50: 20 0d 0a 2b 20 09 20 20 20 20 72 69 50 74 72 20 ..+ . riPtr
0e60: 3d 20 72 69 50 74 72 2d 3e 6e 65 78 74 50 74 72 = riPtr->nextPtr
0e70: 29 20 7b 0d 0a 2b 20 09 69 66 20 28 72 69 50 74 ) {..+ .if (riPt
0e80: 72 2d 3e 69 6e 74 65 72 70 20 3d 3d 20 69 6e 74 r->interp == int
0e90: 65 72 70 29 20 7b 0d 0a 2b 20 09 20 20 20 20 62 erp) {..+ . b
0ea0: 72 65 61 6b 3b 0d 0a 2b 20 09 7d 0d 0a 2b 20 20 reak;..+ .}..+
0eb0: 20 20 20 7d 0d 0a 2b 20 20 20 20 20 72 65 74 75 }..+ retu
0ec0: 72 6e 20 72 69 50 74 72 3b 0d 0a 2b 20 7d 0d 0a rn riPtr;..+ }..
0ed0: 2b 20 0c 0d 0a 2b 20 2f 2a 0d 0a 2b 20 20 2a 2d + ...+ /*..+ *-
0ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2b -------------..+
0f20: 20 20 2a 0d 0a 20 20 20 2a 20 44 65 6c 65 74 65 *.. * Delete
0f30: 50 72 6f 63 0d 0a 20 20 20 2a 0d 0a 20 20 20 2a Proc.. *.. *
0f40: 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 .This procedure
0f50: 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 74 is called when t
0f60: 68 65 20 63 6f 6d 6d 61 6e 64 20 22 64 64 65 22 he command "dde"
0f70: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 0d 0a is destroyed...
0f80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d ***************.
0f90: 0a 2a 2a 2a 20 33 35 39 2c 33 36 34 20 2a 2a 2a .*** 359,364 ***
0fa0: 2a 0d 0a 2d 2d 2d 20 34 32 38 2c 34 33 35 20 2d *..--- 428,435 -
0fb0: 2d 2d 2d 0d 0a 20 20 09 7d 0d 0a 20 20 20 20 20 ---.. .}..
0fc0: 20 7d 0d 0a 20 20 20 20 20 20 63 6b 66 72 65 65 }.. ckfree
0fd0: 28 72 69 50 74 72 2d 3e 6e 61 6d 65 29 3b 0d 0a (riPtr->name);..
0fe0: 2b 20 20 20 20 20 69 66 20 28 72 69 50 74 72 2d + if (riPtr-
0ff0: 3e 68 61 6e 64 6c 65 72 50 74 72 29 0d 0a 2b 20 >handlerPtr)..+
1000: 09 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e .Tcl_DecrRefCoun
1010: 74 28 72 69 50 74 72 2d 3e 68 61 6e 64 6c 65 72 t(riPtr->handler
1020: 50 74 72 29 3b 0d 0a 20 20 20 20 20 20 54 63 6c Ptr);.. Tcl
1030: 5f 45 76 65 6e 74 75 61 6c 6c 79 46 72 65 65 28 _EventuallyFree(
1040: 63 6c 69 65 6e 74 44 61 74 61 2c 20 54 43 4c 5f clientData, TCL_
1050: 44 59 4e 41 4d 49 43 29 3b 0d 0a 20 20 7d 0d 0a DYNAMIC);.. }..
1060: 20 20 0c 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ...***********
1070: 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 33 39 35 2c 34 30 ****..*** 395,40
1080: 31 20 2a 2a 2a 2a 0d 0a 20 20 20 20 20 20 54 63 1 ****.. Tc
1090: 6c 5f 4f 62 6a 20 2a 72 65 74 75 72 6e 50 61 63 l_Obj *returnPac
10a0: 6b 61 67 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 kagePtr;..
10b0: 69 6e 74 20 72 65 73 75 6c 74 3b 0d 0a 20 20 0d int result;.. .
10c0: 0a 21 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 .! result =
10d0: 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 72 69 Tcl_EvalObjEx(ri
10e0: 50 74 72 2d 3e 69 6e 74 65 72 70 2c 20 64 64 65 Ptr->interp, dde
10f0: 4f 62 6a 65 63 74 50 74 72 2c 20 54 43 4c 5f 45 ObjectPtr, TCL_E
1100: 56 41 4c 5f 47 4c 4f 42 41 4c 29 3b 0d 0a 20 20 VAL_GLOBAL);..
1110: 20 20 20 20 72 65 74 75 72 6e 50 61 63 6b 61 67 returnPackag
1120: 65 50 74 72 20 3d 20 54 63 6c 5f 4e 65 77 4c 69 ePtr = Tcl_NewLi
1130: 73 74 4f 62 6a 28 30 2c 20 28 54 63 6c 5f 4f 62 stObj(0, (Tcl_Ob
1140: 6a 20 2a 2a 29 20 4e 55 4c 4c 29 3b 0d 0a 20 20 j **) NULL);..
1150: 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 Tcl_ListObjA
1160: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 4e 55 4c ppendElement(NUL
1170: 4c 2c 20 72 65 74 75 72 6e 50 61 63 6b 61 67 65 L, returnPackage
1180: 50 74 72 2c 0d 0a 20 20 09 20 20 20 20 54 63 6c Ptr,.. . Tcl
1190: 5f 4e 65 77 49 6e 74 4f 62 6a 28 72 65 73 75 6c _NewIntObj(resul
11a0: 74 29 29 3b 0d 0a 2d 2d 2d 20 34 36 36 2c 34 38 t));..--- 466,48
11b0: 36 20 2d 2d 2d 2d 0d 0a 20 20 20 20 20 20 54 63 6 ----.. Tc
11c0: 6c 5f 4f 62 6a 20 2a 72 65 74 75 72 6e 50 61 63 l_Obj *returnPac
11d0: 6b 61 67 65 50 74 72 3b 0d 0a 20 20 20 20 20 20 kagePtr;..
11e0: 69 6e 74 20 72 65 73 75 6c 74 3b 0d 0a 20 20 0d int result;.. .
11f0: 0a 21 20 20 20 20 20 69 66 20 28 72 69 50 74 72 .! if (riPtr
1200: 2d 3e 68 61 6e 64 6c 65 72 50 74 72 20 3d 3d 20 ->handlerPtr ==
1210: 4e 55 4c 4c 20 26 26 20 54 63 6c 5f 49 73 53 61 NULL && Tcl_IsSa
1220: 66 65 28 72 69 50 74 72 2d 3e 69 6e 74 65 72 70 fe(riPtr->interp
1230: 29 29 20 7b 0d 0a 21 20 09 54 63 6c 5f 53 65 74 )) {..! .Tcl_Set
1240: 53 74 72 69 6e 67 4f 62 6a 28 54 63 6c 5f 47 65 StringObj(Tcl_Ge
1250: 74 4f 62 6a 52 65 73 75 6c 74 28 72 69 50 74 72 tObjResult(riPtr
1260: 2d 3e 69 6e 74 65 72 70 29 2c 0d 0a 21 20 09 20 ->interp),..! .
1270: 20 20 20 20 20 20 20 22 70 65 72 6d 69 73 73 69 "permissi
1280: 6f 6e 20 64 65 6e 69 65 64 3a 20 61 20 68 61 6e on denied: a han
1290: 64 6c 65 72 20 70 72 6f 63 65 64 75 72 65 20 6d dler procedure m
12a0: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 66 ust be defined f
12b0: 6f 72 20 75 73 65 20 69 6e 20 61 20 73 61 66 65 or use in a safe
12c0: 20 69 6e 74 65 72 70 22 2c 20 2d 31 29 3b 0d 0a interp", -1);..
12d0: 21 20 09 72 65 73 75 6c 74 20 3d 20 54 43 4c 5f ! .result = TCL_
12e0: 45 52 52 4f 52 3b 0d 0a 21 20 20 20 20 20 7d 0d ERROR;..! }.
12f0: 0a 21 20 0d 0a 21 20 20 20 20 20 69 66 20 28 72 .! ..! if (r
1300: 69 50 74 72 2d 3e 68 61 6e 64 6c 65 72 50 74 72 iPtr->handlerPtr
1310: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0d 0a 21 20 09 != NULL) {..! .
1320: 2f 2a 20 70 72 65 66 69 78 20 74 68 65 20 70 61 /* prefix the pa
1330: 73 73 65 64 20 69 6e 20 61 72 67 75 6d 65 6e 74 ssed in argument
1340: 73 20 77 69 74 68 20 74 68 65 20 68 61 6e 64 6c s with the handl
1350: 65 72 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0d 0a 21 er command */..!
1360: 20 09 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 4c .result = Tcl_L
1370: 69 73 74 4f 62 6a 52 65 70 6c 61 63 65 28 72 69 istObjReplace(ri
1380: 50 74 72 2d 3e 69 6e 74 65 72 70 2c 20 64 64 65 Ptr->interp, dde
1390: 4f 62 6a 65 63 74 50 74 72 2c 20 30 2c 20 30 2c ObjectPtr, 0, 0,
13a0: 20 31 2c 20 26 28 72 69 50 74 72 2d 3e 68 61 6e 1, &(riPtr->han
13b0: 64 6c 65 72 50 74 72 29 29 3b 0d 0a 21 20 20 20 dlerPtr));..!
13c0: 20 20 7d 0d 0a 21 20 0d 0a 21 20 20 20 20 20 69 }..! ..! i
13d0: 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 54 43 4c f (result == TCL
13e0: 5f 4f 4b 29 20 7b 0d 0a 21 20 09 72 65 73 75 6c _OK) {..! .resul
13f0: 74 20 3d 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 t = Tcl_EvalObjE
1400: 78 28 72 69 50 74 72 2d 3e 69 6e 74 65 72 70 2c x(riPtr->interp,
1410: 20 64 64 65 4f 62 6a 65 63 74 50 74 72 2c 20 54 ddeObjectPtr, T
1420: 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29 3b CL_EVAL_GLOBAL);
1430: 0d 0a 21 20 20 20 20 20 7d 0d 0a 21 20 0d 0a 20 ..! }..! ..
1440: 20 20 20 20 20 72 65 74 75 72 6e 50 61 63 6b 61 returnPacka
1450: 67 65 50 74 72 20 3d 20 54 63 6c 5f 4e 65 77 4c gePtr = Tcl_NewL
1460: 69 73 74 4f 62 6a 28 30 2c 20 28 54 63 6c 5f 4f istObj(0, (Tcl_O
1470: 62 6a 20 2a 2a 29 20 4e 55 4c 4c 29 3b 0d 0a 20 bj **) NULL);..
1480: 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a Tcl_ListObj
1490: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 4e 55 AppendElement(NU
14a0: 4c 4c 2c 20 72 65 74 75 72 6e 50 61 63 6b 61 67 LL, returnPackag
14b0: 65 50 74 72 2c 0d 0a 20 20 09 20 20 20 20 54 63 ePtr,.. . Tc
14c0: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 72 65 73 75 l_NewIntObj(resu
14d0: 6c 74 29 29 3b 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a lt));..*********
14e0: 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 35 37 36 2c ******..*** 576,
14f0: 35 39 31 20 2a 2a 2a 2a 0d 0a 20 20 09 09 09 20 591 ****.. ...
1500: 20 20 20 72 65 74 75 72 6e 53 74 72 69 6e 67 2c returnString,
1510: 20 6c 65 6e 2b 31 2c 20 30 2c 20 64 64 65 49 74 len+1, 0, ddeIt
1520: 65 6d 2c 20 43 46 5f 54 45 58 54 2c 0d 0a 20 20 em, CF_TEXT,..
1530: 09 09 09 20 20 20 20 30 29 3b 0d 0a 20 20 09 09 ... 0);.. ..
1540: 7d 20 65 6c 73 65 20 7b 0d 0a 21 20 09 09 20 20 } else {..! ..
1550: 20 20 54 63 6c 5f 4f 62 6a 20 2a 76 61 72 69 61 Tcl_Obj *varia
1560: 62 6c 65 4f 62 6a 50 74 72 20 3d 20 54 63 6c 5f bleObjPtr = Tcl_
1570: 47 65 74 56 61 72 32 45 78 28 0d 0a 21 20 09 09 GetVar2Ex(..! ..
1580: 09 20 20 20 20 63 6f 6e 76 50 74 72 2d 3e 72 69 . convPtr->ri
1590: 50 74 72 2d 3e 69 6e 74 65 72 70 2c 20 75 74 69 Ptr->interp, uti
15a0: 6c 53 74 72 69 6e 67 2c 20 4e 55 4c 4c 2c 20 0d lString, NULL, .
15b0: 0a 21 20 09 09 09 20 20 20 20 54 43 4c 5f 47 4c .! ... TCL_GL
15c0: 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0d 0a 21 20 09 OBAL_ONLY);..! .
15d0: 09 20 20 20 20 69 66 20 28 76 61 72 69 61 62 6c . if (variabl
15e0: 65 4f 62 6a 50 74 72 20 21 3d 20 4e 55 4c 4c 29 eObjPtr != NULL)
15f0: 20 7b 0d 0a 21 20 09 09 09 72 65 74 75 72 6e 53 {..! ...returnS
1600: 74 72 69 6e 67 20 3d 20 54 63 6c 5f 47 65 74 53 tring = Tcl_GetS
1610: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 76 61 72 tringFromObj(var
1620: 69 61 62 6c 65 4f 62 6a 50 74 72 2c 0d 0a 21 20 iableObjPtr,..!
1630: 09 09 09 09 26 6c 65 6e 29 3b 0d 0a 21 20 09 09 ....&len);..! ..
1640: 09 64 64 65 52 65 74 75 72 6e 20 3d 20 44 64 65 .ddeReturn = Dde
1650: 43 72 65 61 74 65 44 61 74 61 48 61 6e 64 6c 65 CreateDataHandle
1660: 28 64 64 65 49 6e 73 74 61 6e 63 65 2c 0d 0a 21 (ddeInstance,..!
1670: 20 09 09 09 09 72 65 74 75 72 6e 53 74 72 69 6e ....returnStrin
1680: 67 2c 20 6c 65 6e 2b 31 2c 20 30 2c 20 64 64 65 g, len+1, 0, dde
1690: 49 74 65 6d 2c 20 43 46 5f 54 45 58 54 2c 20 30 Item, CF_TEXT, 0
16a0: 29 3b 0d 0a 21 20 09 09 20 20 20 20 7d 20 65 6c );..! .. } el
16b0: 73 65 20 7b 0d 0a 20 20 09 09 09 64 64 65 52 65 se {.. ...ddeRe
16c0: 74 75 72 6e 20 3d 20 4e 55 4c 4c 3b 0d 0a 20 20 turn = NULL;..
16d0: 09 09 20 20 20 20 7d 0d 0a 20 20 09 09 7d 0d 0a .. }.. ..}..
16e0: 20 20 09 09 54 63 6c 5f 44 53 74 72 69 6e 67 46 ..Tcl_DStringF
16f0: 72 65 65 28 26 64 53 74 72 69 6e 67 29 3b 0d 0a ree(&dString);..
1700: 2d 2d 2d 20 36 36 31 2c 36 38 30 20 2d 2d 2d 2d --- 661,680 ----
1710: 0d 0a 20 20 09 09 09 20 20 20 20 72 65 74 75 72 .. ... retur
1720: 6e 53 74 72 69 6e 67 2c 20 6c 65 6e 2b 31 2c 20 nString, len+1,
1730: 30 2c 20 64 64 65 49 74 65 6d 2c 20 43 46 5f 54 0, ddeItem, CF_T
1740: 45 58 54 2c 0d 0a 20 20 09 09 09 20 20 20 20 30 EXT,.. ... 0
1750: 29 3b 0d 0a 20 20 09 09 7d 20 65 6c 73 65 20 7b );.. ..} else {
1760: 0d 0a 21 20 09 09 20 20 20 20 69 66 20 28 54 63 ..! .. if (Tc
1770: 6c 5f 49 73 53 61 66 65 28 63 6f 6e 76 50 74 72 l_IsSafe(convPtr
1780: 2d 3e 72 69 50 74 72 2d 3e 69 6e 74 65 72 70 29 ->riPtr->interp)
1790: 29 20 7b 0d 0a 20 20 09 09 09 64 64 65 52 65 74 ) {.. ...ddeRet
17a0: 75 72 6e 20 3d 20 4e 55 4c 4c 3b 0d 0a 2b 20 09 urn = NULL;..+ .
17b0: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 2b . } else {..+
17c0: 20 09 09 09 54 63 6c 5f 4f 62 6a 20 2a 76 61 72 ...Tcl_Obj *var
17d0: 69 61 62 6c 65 4f 62 6a 50 74 72 20 3d 20 54 63 iableObjPtr = Tc
17e0: 6c 5f 47 65 74 56 61 72 32 45 78 28 0d 0a 2b 20 l_GetVar2Ex(..+
17f0: 09 09 09 09 63 6f 6e 76 50 74 72 2d 3e 72 69 50 ....convPtr->riP
1800: 74 72 2d 3e 69 6e 74 65 72 70 2c 20 75 74 69 6c tr->interp, util
1810: 53 74 72 69 6e 67 2c 20 4e 55 4c 4c 2c 20 0d 0a String, NULL, ..
1820: 2b 20 09 09 09 09 54 43 4c 5f 47 4c 4f 42 41 4c + ....TCL_GLOBAL
1830: 5f 4f 4e 4c 59 29 3b 0d 0a 2b 20 09 09 09 69 66 _ONLY);..+ ...if
1840: 20 28 76 61 72 69 61 62 6c 65 4f 62 6a 50 74 72 (variableObjPtr
1850: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0d 0a 2b 20 09 != NULL) {..+ .
1860: 09 09 20 20 20 20 72 65 74 75 72 6e 53 74 72 69 .. returnStri
1870: 6e 67 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 ng = Tcl_GetStri
1880: 6e 67 46 72 6f 6d 4f 62 6a 28 76 61 72 69 61 62 ngFromObj(variab
1890: 6c 65 4f 62 6a 50 74 72 2c 0d 0a 2b 20 09 09 09 leObjPtr,..+ ...
18a0: 20 20 20 20 09 20 20 20 20 26 6c 65 6e 29 3b 0d . &len);.
18b0: 0a 2b 20 09 09 09 20 20 20 20 64 64 65 52 65 74 .+ ... ddeRet
18c0: 75 72 6e 20 3d 20 44 64 65 43 72 65 61 74 65 44 urn = DdeCreateD
18d0: 61 74 61 48 61 6e 64 6c 65 28 64 64 65 49 6e 73 ataHandle(ddeIns
18e0: 74 61 6e 63 65 2c 0d 0a 2b 20 09 09 09 20 20 20 tance,..+ ...
18f0: 20 09 20 20 20 20 72 65 74 75 72 6e 53 74 72 69 . returnStri
1900: 6e 67 2c 20 6c 65 6e 2b 31 2c 20 30 2c 20 64 64 ng, len+1, 0, dd
1910: 65 49 74 65 6d 2c 20 43 46 5f 54 45 58 54 2c 20 eItem, CF_TEXT,
1920: 30 29 3b 0d 0a 2b 20 09 09 09 7d 20 65 6c 73 65 0);..+ ...} else
1930: 20 7b 0d 0a 2b 20 09 09 09 20 20 20 20 64 64 65 {..+ ... dde
1940: 52 65 74 75 72 6e 20 3d 20 4e 55 4c 4c 3b 0d 0a Return = NULL;..
1950: 2b 20 09 09 09 7d 0d 0a 20 20 09 09 20 20 20 20 + ...}.. ..
1960: 7d 0d 0a 20 20 09 09 7d 0d 0a 20 20 09 09 54 63 }.. ..}.. ..Tc
1970: 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26 64 l_DStringFree(&d
1980: 53 74 72 69 6e 67 29 3b 0d 0a 2a 2a 2a 2a 2a 2a String);..******
1990: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 38 *********..*** 8
19a0: 33 39 2c 38 34 34 20 2a 2a 2a 2a 0d 0a 2d 2d 2d 39,844 ****..---
19b0: 20 39 32 38 2c 39 33 34 20 2d 2d 2d 2d 0d 0a 20 928,934 ----..
19c0: 20 09 20 20 28 63 68 61 72 20 2a 29 20 4e 55 4c . (char *) NUL
19d0: 4c 7d 3b 0d 0a 20 20 20 20 20 20 73 74 61 74 69 L};.. stati
19e0: 63 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 64 64 c CONST char *dd
19f0: 65 4f 70 74 69 6f 6e 73 5b 5d 20 3d 20 7b 22 2d eOptions[] = {"-
1a00: 61 73 79 6e 63 22 2c 20 28 63 68 61 72 20 2a 29 async", (char *)
1a10: 20 4e 55 4c 4c 7d 3b 0d 0a 20 20 20 20 20 20 73 NULL};.. s
1a20: 74 61 74 69 63 20 43 4f 4e 53 54 20 63 68 61 72 tatic CONST char
1a30: 20 2a 64 64 65 52 65 71 4f 70 74 69 6f 6e 73 5b *ddeReqOptions[
1a40: 5d 20 3d 20 7b 22 2d 62 69 6e 61 72 79 22 2c 20 ] = {"-binary",
1a50: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 7d 3b 0d (char *) NULL};.
1a60: 0a 2b 20 20 20 20 20 73 74 61 74 69 63 20 43 4f .+ static CO
1a70: 4e 53 54 20 63 68 61 72 20 2a 64 64 65 53 72 76 NST char *ddeSrv
1a80: 4f 70 74 69 6f 6e 73 5b 5d 20 3d 20 7b 22 2d 68 Options[] = {"-h
1a90: 61 6e 64 6c 65 72 22 2c 20 28 63 68 61 72 20 2a andler", (char *
1aa0: 29 20 4e 55 4c 4c 7d 3b 0d 0a 20 20 20 20 20 20 ) NULL};..
1ab0: 69 6e 74 20 69 6e 64 65 78 2c 20 61 72 67 49 6e int index, argIn
1ac0: 64 65 78 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 dex;.. int
1ad0: 61 73 79 6e 63 20 3d 20 30 2c 20 62 69 6e 61 72 async = 0, binar
1ae0: 79 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e y = 0;.. in
1af0: 74 20 72 65 73 75 6c 74 20 3d 20 54 43 4c 5f 4f t result = TCL_O
1b00: 4b 3b 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a K;..************
1b10: 2a 2a 2a 0d 0a 2a 2a 2a 20 38 35 36 2c 38 36 32 ***..*** 856,862
1b20: 20 2a 2a 2a 2a 0d 0a 20 20 20 20 20 20 48 44 44 ****.. HDD
1b30: 45 44 41 54 41 20 64 64 65 52 65 74 75 72 6e 3b EDATA ddeReturn;
1b40: 0d 0a 20 20 20 20 20 20 52 65 67 69 73 74 65 72 .. Register
1b50: 65 64 49 6e 74 65 72 70 20 2a 72 69 50 74 72 3b edInterp *riPtr;
1b60: 0d 0a 20 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 .. Tcl_Inte
1b70: 72 70 20 2a 73 65 6e 64 49 6e 74 65 72 70 3b 0d rp *sendInterp;.
1b80: 0a 21 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a .! Tcl_Obj *
1b90: 6f 62 6a 50 74 72 3b 0d 0a 20 20 20 20 20 20 54 objPtr;.. T
1ba0: 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74 hreadSpecificDat
1bb0: 61 20 2a 74 73 64 50 74 72 20 3d 20 54 43 4c 5f a *tsdPtr = TCL_
1bc0: 54 53 44 5f 49 4e 49 54 28 26 64 61 74 61 4b 65 TSD_INIT(&dataKe
1bd0: 79 29 3b 0d 0a 20 20 0d 0a 20 20 20 20 20 20 2f y);.. .. /
1be0: 2a 0d 0a 2d 2d 2d 20 39 34 36 2c 39 35 32 20 2d *..--- 946,952 -
1bf0: 2d 2d 2d 0d 0a 20 20 20 20 20 20 48 44 44 45 44 ---.. HDDED
1c00: 41 54 41 20 64 64 65 52 65 74 75 72 6e 3b 0d 0a ATA ddeReturn;..
1c10: 20 20 20 20 20 20 52 65 67 69 73 74 65 72 65 64 Registered
1c20: 49 6e 74 65 72 70 20 2a 72 69 50 74 72 3b 0d 0a Interp *riPtr;..
1c30: 20 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 Tcl_Interp
1c40: 20 2a 73 65 6e 64 49 6e 74 65 72 70 3b 0d 0a 21 *sendInterp;..!
1c50: 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 62 Tcl_Obj *ob
1c60: 6a 50 74 72 2c 20 2a 68 61 6e 64 6c 65 72 50 74 jPtr, *handlerPt
1c70: 72 3b 0d 0a 20 20 20 20 20 20 54 68 72 65 61 64 r;.. Thread
1c80: 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 73 SpecificData *ts
1c90: 64 50 74 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 dPtr = TCL_TSD_I
1ca0: 4e 49 54 28 26 64 61 74 61 4b 65 79 29 3b 0d 0a NIT(&dataKey);..
1cb0: 20 20 0d 0a 20 20 20 20 20 20 2f 2a 0d 0a 2a 2a .. /*..**
1cc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a *************..*
1cd0: 2a 2a 20 38 37 36 2c 38 38 36 20 2a 2a 2a 2a 0d ** 876,886 ****.
1ce0: 0a 20 20 0d 0a 20 20 20 20 20 20 73 77 69 74 63 . .. switc
1cf0: 68 20 28 69 6e 64 65 78 29 20 7b 0d 0a 20 20 09 h (index) {.. .
1d00: 63 61 73 65 20 44 44 45 5f 53 45 52 56 45 52 4e case DDE_SERVERN
1d10: 41 4d 45 3a 0d 0a 21 20 09 20 20 20 20 69 66 20 AME:..! . if
1d20: 28 28 6f 62 6a 63 20 21 3d 20 33 29 20 26 26 20 ((objc != 3) &&
1d30: 28 6f 62 6a 63 20 21 3d 20 32 29 29 20 7b 0d 0a (objc != 2)) {..
1d40: 21 20 09 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d ! ..Tcl_WrongNum
1d50: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 Args(interp, 1,
1d60: 6f 62 6a 76 2c 20 22 73 65 72 76 65 72 6e 61 6d objv, "servernam
1d70: 65 20 3f 73 65 72 76 65 72 4e 61 6d 65 3f 22 29 e ?serverName?")
1d80: 3b 0d 0a 20 20 09 09 72 65 74 75 72 6e 20 54 43 ;.. ..return TC
1d90: 4c 5f 45 52 52 4f 52 3b 0d 0a 20 20 09 20 20 20 L_ERROR;.. .
1da0: 20 7d 0d 0a 21 20 09 20 20 20 20 66 69 72 73 74 }..! . first
1db0: 41 72 67 20 3d 20 28 6f 62 6a 63 20 2d 20 31 29 Arg = (objc - 1)
1dc0: 3b 0d 0a 20 20 09 20 20 20 20 62 72 65 61 6b 3b ;.. . break;
1dd0: 0d 0a 20 20 09 63 61 73 65 20 44 44 45 5f 45 58 .. .case DDE_EX
1de0: 45 43 55 54 45 3a 0d 0a 20 20 09 20 20 20 20 69 ECUTE:.. . i
1df0: 66 20 28 28 6f 62 6a 63 20 3c 20 35 29 20 7c 7c f ((objc < 5) ||
1e00: 20 28 6f 62 6a 63 20 3e 20 36 29 29 20 7b 0d 0a (objc > 6)) {..
1e10: 2d 2d 2d 20 39 36 36 2c 39 39 37 20 2d 2d 2d 2d --- 966,997 ----
1e20: 0d 0a 20 20 0d 0a 20 20 20 20 20 20 73 77 69 74 .. .. swit
1e30: 63 68 20 28 69 6e 64 65 78 29 20 7b 0d 0a 20 20 ch (index) {..
1e40: 09 63 61 73 65 20 44 44 45 5f 53 45 52 56 45 52 .case DDE_SERVER
1e50: 4e 41 4d 45 3a 0d 0a 21 20 09 20 20 20 20 69 66 NAME:..! . if
1e60: 20 28 28 6f 62 6a 63 20 3c 20 32 29 20 26 26 20 ((objc < 2) &&
1e70: 28 6f 62 6a 63 20 3e 20 35 29 29 20 7b 0d 0a 21 (objc > 5)) {..!
1e80: 20 09 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 ..Tcl_WrongNumA
1e90: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f rgs(interp, 1, o
1ea0: 62 6a 76 2c 20 22 73 65 72 76 65 72 6e 61 6d 65 bjv, "servername
1eb0: 20 3f 2d 68 61 6e 64 6c 65 72 20 70 72 6f 63 3f ?-handler proc?
1ec0: 20 3f 73 65 72 76 65 72 4e 61 6d 65 3f 22 29 3b ?serverName?");
1ed0: 0d 0a 20 20 09 09 72 65 74 75 72 6e 20 54 43 4c .. ..return TCL
1ee0: 5f 45 52 52 4f 52 3b 0d 0a 20 20 09 20 20 20 20 _ERROR;.. .
1ef0: 7d 0d 0a 21 20 09 20 20 20 20 69 66 20 28 6f 62 }..! . if (ob
1f00: 6a 63 20 3e 20 32 20 26 26 20 54 63 6c 5f 47 65 jc > 2 && Tcl_Ge
1f10: 74 49 6e 64 65 78 46 72 6f 6d 4f 62 6a 28 4e 55 tIndexFromObj(NU
1f20: 4c 4c 2c 20 6f 62 6a 76 5b 32 5d 2c 20 64 64 65 LL, objv[2], dde
1f30: 53 72 76 4f 70 74 69 6f 6e 73 2c 20 22 6f 70 74 SrvOptions, "opt
1f40: 69 6f 6e 22 2c 20 30 2c 0d 0a 21 20 09 09 20 20 ion", 0,..! ..
1f50: 20 20 26 61 72 67 49 6e 64 65 78 29 20 3d 3d 20 &argIndex) ==
1f60: 54 43 4c 5f 4f 4b 29 20 7b 0d 0a 21 20 09 09 69 TCL_OK) {..! ..i
1f70: 66 20 28 6f 62 6a 63 20 3c 20 34 29 20 7b 0d 0a f (objc < 4) {..
1f80: 21 20 09 09 20 20 20 20 52 65 67 69 73 74 65 72 ! .. Register
1f90: 65 64 49 6e 74 65 72 70 20 2a 72 69 50 74 72 20 edInterp *riPtr
1fa0: 3d 20 44 64 65 47 65 74 52 65 67 69 73 74 72 61 = DdeGetRegistra
1fb0: 74 69 6f 6e 50 74 72 28 69 6e 74 65 72 70 29 3b tionPtr(interp);
1fc0: 0d 0a 21 20 09 09 20 20 20 20 69 66 20 28 72 69 ..! .. if (ri
1fd0: 50 74 72 20 26 26 20 72 69 50 74 72 2d 3e 68 61 Ptr && riPtr->ha
1fe0: 6e 64 6c 65 72 50 74 72 29 20 7b 0d 0a 21 20 09 ndlerPtr) {..! .
1ff0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 ..Tcl_SetObjResu
2000: 6c 74 28 69 6e 74 65 72 70 2c 20 72 69 50 74 72 lt(interp, riPtr
2010: 2d 3e 68 61 6e 64 6c 65 72 50 74 72 29 3b 0d 0a ->handlerPtr);..
2020: 21 20 09 09 20 20 20 20 7d 20 65 6c 73 65 20 7b ! .. } else {
2030: 0d 0a 21 20 09 09 09 54 63 6c 5f 52 65 73 65 74 ..! ...Tcl_Reset
2040: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0d Result(interp);.
2050: 0a 21 20 09 09 20 20 20 20 7d 0d 0a 21 20 09 09 .! .. }..! ..
2060: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f return TCL_O
2070: 4b 3b 0d 0a 21 20 09 09 7d 0d 0a 21 20 09 09 68 K;..! ..}..! ..h
2080: 61 6e 64 6c 65 72 50 74 72 20 3d 20 6f 62 6a 76 andlerPtr = objv
2090: 5b 33 5d 3b 0d 0a 21 20 09 09 66 69 72 73 74 41 [3];..! ..firstA
20a0: 72 67 20 3d 20 28 6f 62 6a 63 20 3d 3d 20 35 29 rg = (objc == 5)
20b0: 20 3f 20 28 6f 62 6a 63 20 2d 20 31 29 20 3a 20 ? (objc - 1) :
20c0: 31 3b 0d 0a 21 20 09 20 20 20 20 7d 20 65 6c 73 1;..! . } els
20d0: 65 20 7b 0d 0a 21 20 09 09 69 66 20 28 6f 62 6a e {..! ..if (obj
20e0: 63 20 3e 20 33 29 20 7b 0d 0a 21 20 09 09 20 20 c > 3) {..! ..
20f0: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 Tcl_WrongNumAr
2100: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 gs(interp, 1, ob
2110: 6a 76 2c 0d 0a 21 20 09 09 09 20 20 20 20 22 73 jv,..! ... "s
2120: 65 72 76 65 72 6e 61 6d 65 20 3f 2d 68 61 6e 64 ervername ?-hand
2130: 6c 65 72 20 70 72 6f 63 3f 20 3f 73 65 72 76 65 ler proc? ?serve
2140: 72 4e 61 6d 65 3f 22 29 3b 0d 0a 21 20 09 09 20 rName?");..! ..
2150: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 return TCL_ER
2160: 52 4f 52 3b 0d 0a 21 20 09 09 7d 0d 0a 21 20 09 ROR;..! ..}..! .
2170: 09 68 61 6e 64 6c 65 72 50 74 72 20 3d 20 4e 55 .handlerPtr = NU
2180: 4c 4c 3b 0d 0a 21 20 09 09 66 69 72 73 74 41 72 LL;..! ..firstAr
2190: 67 20 3d 20 28 6f 62 6a 63 20 2d 20 31 29 3b 0d g = (objc - 1);.
21a0: 0a 21 20 09 20 20 20 20 7d 0d 0a 20 20 09 20 20 .! . }.. .
21b0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 09 63 61 73 break;.. .cas
21c0: 65 20 44 44 45 5f 45 58 45 43 55 54 45 3a 0d 0a e DDE_EXECUTE:..
21d0: 20 20 09 20 20 20 20 69 66 20 28 28 6f 62 6a 63 . if ((objc
21e0: 20 3c 20 35 29 20 7c 7c 20 28 6f 62 6a 63 20 3e < 5) || (objc >
21f0: 20 36 29 29 20 7b 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a 6)) {..********
2200: 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 31 30 30 *******..*** 100
2210: 32 2c 31 30 30 38 20 2a 2a 2a 2a 0d 0a 20 20 0d 2,1008 ****.. .
2220: 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 69 . switch (i
2230: 6e 64 65 78 29 20 7b 0d 0a 20 20 09 63 61 73 65 ndex) {.. .case
2240: 20 44 44 45 5f 53 45 52 56 45 52 4e 41 4d 45 3a DDE_SERVERNAME:
2250: 20 7b 0d 0a 21 20 09 20 20 20 20 73 65 72 76 69 {..! . servi
2260: 63 65 4e 61 6d 65 20 3d 20 44 64 65 53 65 74 53 ceName = DdeSetS
2270: 65 72 76 65 72 4e 61 6d 65 28 69 6e 74 65 72 70 erverName(interp
2280: 2c 20 73 65 72 76 69 63 65 4e 61 6d 65 29 3b 0d , serviceName);.
2290: 0a 20 20 09 20 20 20 20 69 66 20 28 73 65 72 76 . . if (serv
22a0: 69 63 65 4e 61 6d 65 20 21 3d 20 4e 55 4c 4c 29 iceName != NULL)
22b0: 20 7b 0d 0a 20 20 09 09 54 63 6c 5f 53 65 74 53 {.. ..Tcl_SetS
22c0: 74 72 69 6e 67 4f 62 6a 28 54 63 6c 5f 47 65 74 tringObj(Tcl_Get
22d0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 ObjResult(interp
22e0: 29 2c 0d 0a 20 20 09 09 09 73 65 72 76 69 63 65 ),.. ...service
22f0: 4e 61 6d 65 2c 20 2d 31 29 3b 0d 0a 2d 2d 2d 20 Name, -1);..---
2300: 31 31 31 33 2c 31 31 31 39 20 2d 2d 2d 2d 0d 0a 1113,1119 ----..
2310: 20 20 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 .. switch
2320: 20 28 69 6e 64 65 78 29 20 7b 0d 0a 20 20 09 63 (index) {.. .c
2330: 61 73 65 20 44 44 45 5f 53 45 52 56 45 52 4e 41 ase DDE_SERVERNA
2340: 4d 45 3a 20 7b 0d 0a 21 20 09 20 20 20 20 73 65 ME: {..! . se
2350: 72 76 69 63 65 4e 61 6d 65 20 3d 20 44 64 65 53 rviceName = DdeS
2360: 65 74 53 65 72 76 65 72 4e 61 6d 65 28 69 6e 74 etServerName(int
2370: 65 72 70 2c 20 73 65 72 76 69 63 65 4e 61 6d 65 erp, serviceName
2380: 2c 20 68 61 6e 64 6c 65 72 50 74 72 29 3b 0d 0a , handlerPtr);..
2390: 20 20 09 20 20 20 20 69 66 20 28 73 65 72 76 69 . if (servi
23a0: 63 65 4e 61 6d 65 20 21 3d 20 4e 55 4c 4c 29 20 ceName != NULL)
23b0: 7b 0d 0a 20 20 09 09 54 63 6c 5f 53 65 74 53 74 {.. ..Tcl_SetSt
23c0: 72 69 6e 67 4f 62 6a 28 54 63 6c 5f 47 65 74 4f ringObj(Tcl_GetO
23d0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 bjResult(interp)
23e0: 2c 0d 0a 20 20 09 09 09 73 65 72 76 69 63 65 4e ,.. ...serviceN
23f0: 61 6d 65 2c 20 2d 31 29 3b 0d 0a ame, -1);..