Attachment "tclWinDde.c.unique.patch" to
ticket [690354ffff]
added by
patthoyts
2003-03-11 20:59:16.
0000: 2a 2a 2a 20 74 63 6c 57 69 6e 44 64 65 2e 63 2e *** tclWinDde.c.
0010: 6f 72 69 67 09 54 68 75 20 4d 61 72 20 30 36 20 orig.Thu Mar 06
0020: 32 31 3a 35 35 3a 31 31 20 32 30 30 33 0d 0a 2d 21:55:11 2003..-
0030: 2d 2d 20 74 63 6c 57 69 6e 44 64 65 2e 63 09 4d -- tclWinDde.c.M
0040: 6f 6e 20 4d 61 72 20 31 30 20 31 36 3a 33 36 3a on Mar 10 16:36:
0050: 32 32 20 32 30 30 33 0d 0a 2a 2a 2a 2a 2a 2a 2a 22 2003..*******
0060: 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 31 34 ********..*** 14
0070: 2c 32 31 20 2a 2a 2a 2a 0d 0a 20 20 20 2a 2f 0d ,21 ****.. */.
0080: 0a 20 20 0d 0a 20 20 23 69 6e 63 6c 75 64 65 20 . .. #include
0090: 22 74 63 6c 50 6f 72 74 2e 68 22 0d 0a 20 20 23 "tclPort.h".. #
00a0: 69 6e 63 6c 75 64 65 20 3c 64 64 65 6d 6c 2e 68 include <ddeml.h
00b0: 3e 0d 0a 21 20 0d 0a 20 20 2f 2a 0d 0a 20 20 20 >..! .. /*..
00c0: 2a 20 54 43 4c 5f 53 54 4f 52 41 47 45 5f 43 4c * TCL_STORAGE_CL
00d0: 41 53 53 20 69 73 20 73 65 74 20 75 6e 63 6f 6e ASS is set uncon
00e0: 64 69 74 69 6f 6e 61 6c 6c 79 20 74 6f 20 44 4c ditionally to DL
00f0: 4c 45 58 50 4f 52 54 20 62 65 63 61 75 73 65 20 LEXPORT because
0100: 74 68 65 0d 0a 20 20 20 2a 20 52 65 67 69 73 74 the.. * Regist
0110: 72 79 5f 49 6e 69 74 20 64 65 63 6c 61 72 61 74 ry_Init declarat
0120: 69 6f 6e 20 69 73 20 69 6e 20 74 68 65 20 73 6f ion is in the so
0130: 75 72 63 65 20 66 69 6c 65 20 69 74 73 65 6c 66 urce file itself
0140: 2c 20 77 68 69 63 68 20 69 73 20 6f 6e 6c 79 0d , which is only.
0150: 0a 2d 2d 2d 20 31 34 2c 32 32 20 2d 2d 2d 2d 0d .--- 14,22 ----.
0160: 0a 20 20 20 2a 2f 0d 0a 20 20 0d 0a 20 20 23 69 . */.. .. #i
0170: 6e 63 6c 75 64 65 20 22 74 63 6c 50 6f 72 74 2e nclude "tclPort.
0180: 68 22 0d 0a 2b 20 23 69 6e 63 6c 75 64 65 20 3c h"..+ #include <
0190: 64 64 65 2e 68 3e 0d 0a 20 20 23 69 6e 63 6c 75 dde.h>.. #inclu
01a0: 64 65 20 3c 64 64 65 6d 6c 2e 68 3e 0d 0a 21 20 de <ddeml.h>..!
01b0: 23 69 6e 63 6c 75 64 65 20 3c 74 63 68 61 72 2e #include <tchar.
01c0: 68 3e 0d 0a 20 20 2f 2a 0d 0a 20 20 20 2a 20 54 h>.. /*.. * T
01d0: 43 4c 5f 53 54 4f 52 41 47 45 5f 43 4c 41 53 53 CL_STORAGE_CLASS
01e0: 20 69 73 20 73 65 74 20 75 6e 63 6f 6e 64 69 74 is set uncondit
01f0: 69 6f 6e 61 6c 6c 79 20 74 6f 20 44 4c 4c 45 58 ionally to DLLEX
0200: 50 4f 52 54 20 62 65 63 61 75 73 65 20 74 68 65 PORT because the
0210: 0d 0a 20 20 20 2a 20 52 65 67 69 73 74 72 79 5f .. * Registry_
0220: 49 6e 69 74 20 64 65 63 6c 61 72 61 74 69 6f 6e Init declaration
0230: 20 69 73 20 69 6e 20 74 68 65 20 73 6f 75 72 63 is in the sourc
0240: 65 20 66 69 6c 65 20 69 74 73 65 6c 66 2c 20 77 e file itself, w
0250: 68 69 63 68 20 69 73 20 6f 6e 6c 79 0d 0a 2a 2a hich is only..**
0260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a *************..*
0270: 2a 2a 20 39 31 2c 39 36 20 2a 2a 2a 2a 0d 0a 2d ** 91,96 ****..-
0280: 2d 2d 20 39 32 2c 31 30 31 20 2d 2d 2d 2d 0d 0a -- 92,101 ----..
0290: 20 20 09 09 09 09 48 53 5a 20 64 64 65 49 74 65 ....HSZ ddeIte
02a0: 6d 2c 20 48 44 44 45 44 41 54 41 20 68 44 61 74 m, HDDEDATA hDat
02b0: 61 2c 20 44 57 4f 52 44 20 64 77 44 61 74 61 31 a, DWORD dwData1
02c0: 2c 20 0d 0a 20 20 09 09 09 09 44 57 4f 52 44 20 , .. ....DWORD
02d0: 64 77 44 61 74 61 32 29 29 3b 0d 0a 20 20 73 74 dwData2));.. st
02e0: 61 74 69 63 20 76 6f 69 64 09 09 20 20 20 20 53 atic void.. S
02f0: 65 74 44 64 65 45 72 72 6f 72 20 5f 41 4e 53 49 etDdeError _ANSI
0300: 5f 41 52 47 53 5f 28 28 54 63 6c 5f 49 6e 74 65 _ARGS_((Tcl_Inte
0310: 72 70 20 2a 69 6e 74 65 72 70 29 29 3b 0d 0a 2b rp *interp));..+
0320: 20 73 74 61 74 69 63 20 69 6e 74 20 20 20 20 20 static int
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 64 65 Dde
0340: 47 65 74 53 65 72 76 69 63 65 73 4c 69 73 74 20 GetServicesList
0350: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 0d 0a 2b _ANSI_ARGS_((..+
0360: 20 09 09 09 09 54 63 6c 5f 49 6e 74 65 72 70 20 ....Tcl_Interp
0370: 2a 69 6e 74 65 72 70 2c 0d 0a 2b 20 09 09 09 09 *interp,..+ ....
0380: 63 68 61 72 20 2a 73 65 72 76 69 63 65 4e 61 6d char *serviceNam
0390: 65 2c 0d 0a 2b 20 09 09 09 09 63 68 61 72 20 2a e,..+ ....char *
03a0: 74 6f 70 69 63 4e 61 6d 65 29 29 3b 0d 0a 20 20 topicName));..
03b0: 69 6e 74 20 54 63 6c 5f 44 64 65 4f 62 6a 43 6d int Tcl_DdeObjCm
03c0: 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 d(ClientData cli
03d0: 65 6e 74 44 61 74 61 2c 09 2f 2a 20 55 73 65 64 entData,./* Used
03e0: 20 6f 6e 6c 79 20 66 6f 72 20 64 65 6c 65 74 69 only for deleti
03f0: 6f 6e 20 2a 2f 0d 0a 20 20 09 54 63 6c 5f 49 6e on */.. .Tcl_In
0400: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 09 09 2f terp *interp,../
0410: 2a 20 54 68 65 20 69 6e 74 65 72 70 20 77 65 20 * The interp we
0420: 61 72 65 20 73 65 6e 64 69 6e 67 20 66 72 6f 6d are sending from
0430: 20 2a 2f 0d 0a 20 20 09 69 6e 74 20 6f 62 6a 63 */.. .int objc
0440: 2c 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 ,.../* Number of
0450: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0d 0a 2a arguments */..*
0460: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a **************..
0470: 2a 2a 2a 20 32 32 36 2c 32 34 31 20 2a 2a 2a 2a *** 226,241 ****
0480: 0d 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20 .. static char
0490: 2a 0d 0a 20 20 44 64 65 53 65 74 53 65 72 76 65 *.. DdeSetServe
04a0: 72 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 54 63 rName(.. Tc
04b0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
04c0: 2c 0d 0a 21 20 20 20 20 20 63 68 61 72 20 2a 6e ,..! char *n
04d0: 61 6d 65 09 09 09 2f 2a 20 54 68 65 20 6e 61 6d ame.../* The nam
04e0: 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 e that will be u
04f0: 73 65 64 20 74 6f 0d 0a 20 20 09 09 09 09 20 2a sed to.. .... *
0500: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 69 6e refer to the in
0510: 74 65 72 70 72 65 74 65 72 20 69 6e 20 6c 61 74 terpreter in lat
0520: 65 72 0d 0a 20 20 09 09 09 09 20 2a 20 22 73 65 er.. .... * "se
0530: 6e 64 22 20 63 6f 6d 6d 61 6e 64 73 2e 20 20 4d nd" commands. M
0540: 75 73 74 20 62 65 20 67 6c 6f 62 61 6c 6c 79 0d ust be globally.
0550: 0a 20 20 09 09 09 09 20 2a 20 75 6e 69 71 75 65 . .... * unique
0560: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 29 0d 0a 20 . */.. )..
0570: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 73 75 {.. int su
0580: 66 66 69 78 2c 20 6f 66 66 73 65 74 3b 0d 0a 20 ffix, offset;..
0590: 20 20 20 20 20 52 65 67 69 73 74 65 72 65 64 49 RegisteredI
05a0: 6e 74 65 72 70 20 2a 72 69 50 74 72 2c 20 2a 70 nterp *riPtr, *p
05b0: 72 65 76 50 74 72 3b 0d 0a 20 20 20 20 20 20 54 revPtr;.. T
05c0: 63 6c 5f 44 53 74 72 69 6e 67 20 64 53 74 72 69 cl_DString dStri
05d0: 6e 67 3b 0d 0a 20 20 20 20 20 20 54 68 72 65 61 ng;.. Threa
05e0: 64 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 dSpecificData *t
05f0: 73 64 50 74 72 20 3d 20 54 43 4c 5f 54 53 44 5f sdPtr = TCL_TSD_
0600: 49 4e 49 54 28 26 64 61 74 61 4b 65 79 29 3b 0d INIT(&dataKey);.
0610: 0a 20 20 0d 0a 20 20 20 20 20 20 2f 2a 0d 0a 20 . .. /*..
0620: 20 20 20 20 20 20 2a 20 53 65 65 20 69 66 20 74 * See if t
0630: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 he application i
0640: 73 20 61 6c 72 65 61 64 79 20 72 65 67 69 73 74 s already regist
0650: 65 72 65 64 3b 20 69 66 20 73 6f 2c 20 72 65 6d ered; if so, rem
0660: 6f 76 65 20 69 74 73 0d 0a 2d 2d 2d 20 32 33 31 ove its..--- 231
0670: 2c 32 35 31 20 2d 2d 2d 2d 0d 0a 20 20 73 74 61 ,251 ----.. sta
0680: 74 69 63 20 63 68 61 72 20 2a 0d 0a 20 20 44 64 tic char *.. Dd
0690: 65 53 65 74 53 65 72 76 65 72 4e 61 6d 65 28 0d eSetServerName(.
06a0: 0a 20 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 . Tcl_Inter
06b0: 70 20 2a 69 6e 74 65 72 70 2c 0d 0a 21 20 20 20 p *interp,..!
06c0: 20 20 63 68 61 72 20 2a 6e 61 6d 65 2c 09 09 09 char *name,...
06d0: 2f 2a 20 54 68 65 20 6e 61 6d 65 20 74 68 61 74 /* The name that
06e0: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f will be used to
06f0: 0d 0a 20 20 09 09 09 09 20 2a 20 72 65 66 65 72 .. .... * refer
0700: 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 to the interpre
0710: 74 65 72 20 69 6e 20 6c 61 74 65 72 0d 0a 20 20 ter in later..
0720: 09 09 09 09 20 2a 20 22 73 65 6e 64 22 20 63 6f .... * "send" co
0730: 6d 6d 61 6e 64 73 2e 20 20 4d 75 73 74 20 62 65 mmands. Must be
0740: 20 67 6c 6f 62 61 6c 6c 79 0d 0a 20 20 09 09 09 globally.. ...
0750: 09 20 2a 20 75 6e 69 71 75 65 2e 20 2a 2f 0d 0a . * unique. */..
0760: 2b 20 20 20 20 20 69 6e 74 20 65 78 61 63 74 4e + int exactN
0770: 61 6d 65 09 09 2f 2a 20 53 68 6f 75 6c 64 20 77 ame../* Should w
0780: 65 20 6d 61 6b 65 20 61 20 75 6e 69 71 75 65 20 e make a unique
0790: 6e 61 6d 65 3f 20 30 20 3d 20 79 65 73 20 2a 2f name? 0 = yes */
07a0: 0d 0a 20 20 20 20 20 20 29 0d 0a 20 20 7b 0d 0a .. ).. {..
07b0: 20 20 20 20 20 20 69 6e 74 20 73 75 66 66 69 78 int suffix
07c0: 2c 20 6f 66 66 73 65 74 3b 0d 0a 20 20 20 20 20 , offset;..
07d0: 20 52 65 67 69 73 74 65 72 65 64 49 6e 74 65 72 RegisteredInter
07e0: 70 20 2a 72 69 50 74 72 2c 20 2a 70 72 65 76 50 p *riPtr, *prevP
07f0: 74 72 3b 0d 0a 20 20 20 20 20 20 54 63 6c 5f 44 tr;.. Tcl_D
0800: 53 74 72 69 6e 67 20 64 53 74 72 69 6e 67 3b 0d String dString;.
0810: 0a 20 20 20 20 20 20 54 68 72 65 61 64 53 70 65 . ThreadSpe
0820: 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 cificData *tsdPt
0830: 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54 r = TCL_TSD_INIT
0840: 28 26 64 61 74 61 4b 65 79 29 3b 0d 0a 2b 20 20 (&dataKey);..+
0850: 20 20 20 63 68 61 72 20 2a 61 63 74 75 61 6c 4e char *actualN
0860: 61 6d 65 3b 0d 0a 2b 20 20 20 20 20 54 63 6c 5f ame;..+ Tcl_
0870: 4f 62 6a 20 2a 73 72 76 4c 69 73 74 50 74 72 20 Obj *srvListPtr
0880: 3d 20 4e 55 4c 4c 3b 0d 0a 2b 20 20 20 20 20 54 = NULL;..+ T
0890: 63 6c 5f 4f 62 6a 20 2a 2a 73 72 76 50 74 72 50 cl_Obj **srvPtrP
08a0: 74 72 20 3d 20 4e 55 4c 4c 3b 0d 0a 2b 20 20 20 tr = NULL;..+
08b0: 20 20 69 6e 74 20 6e 2c 20 73 72 76 43 6f 75 6e int n, srvCoun
08c0: 74 20 3d 20 30 2c 20 6c 61 73 74 53 75 66 66 69 t = 0, lastSuffi
08d0: 78 2c 20 72 20 3d 20 54 43 4c 5f 4f 4b 3b 0d 0a x, r = TCL_OK;..
08e0: 20 20 0d 0a 20 20 20 20 20 20 2f 2a 0d 0a 20 20 .. /*..
08f0: 20 20 20 20 20 2a 20 53 65 65 20 69 66 20 74 68 * See if th
0900: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 73 e application is
0910: 20 61 6c 72 65 61 64 79 20 72 65 67 69 73 74 65 already registe
0920: 72 65 64 3b 20 69 66 20 73 6f 2c 20 72 65 6d 6f red; if so, remo
0930: 76 65 20 69 74 73 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a ve its..********
0940: 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 32 37 34 *******..*** 274
0950: 2c 32 38 39 20 2a 2a 2a 2a 0d 0a 20 20 09 72 65 ,289 ****.. .re
0960: 74 75 72 6e 20 22 22 3b 0d 0a 20 20 20 20 20 20 turn "";..
0970: 7d 0d 0a 20 20 20 20 20 20 0d 0a 21 20 20 20 20 }.. ..!
0980: 20 2f 2a 0d 0a 21 20 20 20 20 20 20 2a 20 50 69 /*..! * Pi
0990: 63 6b 20 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 ck a name to use
09a0: 20 66 6f 72 20 74 68 65 20 61 70 70 6c 69 63 61 for the applica
09b0: 74 69 6f 6e 2e 20 20 55 73 65 20 22 6e 61 6d 65 tion. Use "name
09c0: 22 20 69 66 20 69 74 27 73 20 6e 6f 74 0d 0a 21 " if it's not..!
09d0: 20 20 20 20 20 20 2a 20 61 6c 72 65 61 64 79 20 * already
09e0: 69 6e 20 75 73 65 2e 20 20 4f 74 68 65 72 77 69 in use. Otherwi
09f0: 73 65 20 61 64 64 20 61 20 73 75 66 66 69 78 20 se add a suffix
0a00: 73 75 63 68 20 61 73 20 22 20 23 32 22 2c 20 74 such as " #2", t
0a10: 72 79 69 6e 67 0d 0a 21 20 20 20 20 20 20 2a 20 rying..! *
0a20: 6c 61 72 67 65 72 20 61 6e 64 20 6c 61 72 67 65 larger and large
0a30: 72 20 6e 75 6d 62 65 72 73 20 75 6e 74 69 6c 20 r numbers until
0a40: 77 65 20 65 76 65 6e 74 75 61 6c 6c 79 20 66 69 we eventually fi
0a50: 6e 64 20 6f 6e 65 20 74 68 61 74 20 69 73 0d 0a nd one that is..
0a60: 21 20 20 20 20 20 20 2a 20 75 6e 69 71 75 65 2e ! * unique.
0a70: 0d 0a 20 20 20 20 20 20 20 2a 2f 0d 0a 2d 20 0d .. */..- .
0a80: 0a 2d 20 20 20 20 20 73 75 66 66 69 78 20 3d 20 .- suffix =
0a90: 31 3b 0d 0a 2d 20 20 20 20 20 6f 66 66 73 65 74 1;..- offset
0aa0: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 54 63 6c = 0;.. Tcl
0ab0: 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 64 53 _DStringInit(&dS
0ac0: 74 72 69 6e 67 29 3b 0d 0a 20 20 0d 0a 20 20 20 tring);.. ..
0ad0: 20 20 20 2f 2a 0d 0a 20 20 20 20 20 20 20 2a 20 /*.. *
0ae0: 57 65 20 68 61 76 65 20 66 6f 75 6e 64 20 61 20 We have found a
0af0: 75 6e 69 71 75 65 20 6e 61 6d 65 2e 20 4e 6f 77 unique name. Now
0b00: 20 61 64 64 20 69 74 20 74 6f 20 74 68 65 20 72 add it to the r
0b10: 65 67 69 73 74 72 79 2e 0d 0a 2d 2d 2d 20 32 38 egistry...--- 28
0b20: 34 2c 33 34 36 20 2d 2d 2d 2d 0d 0a 20 20 09 72 4,346 ----.. .r
0b30: 65 74 75 72 6e 20 22 22 3b 0d 0a 20 20 20 20 20 eturn "";..
0b40: 20 7d 0d 0a 20 20 20 20 20 20 0d 0a 21 20 20 20 }.. ..!
0b50: 20 20 2f 2a 20 0d 0a 21 20 20 20 20 20 20 2a 20 /* ..! *
0b60: 47 65 74 20 74 68 65 20 6c 69 73 74 20 6f 66 20 Get the list of
0b70: 63 75 72 72 65 6e 74 6c 79 20 72 65 67 69 73 74 currently regist
0b80: 65 72 65 64 20 54 63 6c 20 69 6e 74 65 72 70 72 ered Tcl interpr
0b90: 65 74 65 72 73 20 62 79 20 63 61 6c 6c 69 6e 67 eters by calling
0ba0: 0d 0a 21 20 20 20 20 20 20 2a 20 64 69 72 65 63 ..! * direc
0bb0: 74 6c 79 20 74 68 65 20 27 64 64 65 20 73 65 72 tly the 'dde ser
0bc0: 76 69 63 65 73 20 54 63 6c 45 76 61 6c 20 7b 7d vices TclEval {}
0bd0: 27 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 ' command...
0be0: 20 20 20 2a 2f 0d 0a 20 20 20 20 20 20 54 63 6c */.. Tcl
0bf0: 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 64 53 _DStringInit(&dS
0c00: 74 72 69 6e 67 29 3b 0d 0a 2b 20 20 20 20 20 61 tring);..+ a
0c10: 63 74 75 61 6c 4e 61 6d 65 20 3d 20 6e 61 6d 65 ctualName = name
0c20: 3b 0d 0a 2b 20 0d 0a 2b 20 20 20 20 20 69 66 20 ;..+ ..+ if
0c30: 28 21 20 65 78 61 63 74 4e 61 6d 65 20 29 0d 0a (! exactName )..
0c40: 2b 20 20 20 20 20 7b 0d 0a 2b 20 09 20 20 20 20 + {..+ .
0c50: 72 20 3d 20 44 64 65 47 65 74 53 65 72 76 69 63 r = DdeGetServic
0c60: 65 73 4c 69 73 74 28 69 6e 74 65 72 70 2c 20 22 esList(interp, "
0c70: 54 63 6c 45 76 61 6c 22 2c 20 4e 55 4c 4c 29 3b TclEval", NULL);
0c80: 0d 0a 2b 20 20 20 20 20 20 20 20 20 69 66 20 28 ..+ if (
0c90: 72 20 3d 3d 20 54 43 4c 5f 4f 4b 29 0d 0a 2b 20 r == TCL_OK)..+
0ca0: 09 20 20 20 20 20 20 20 20 73 72 76 4c 69 73 74 . srvList
0cb0: 50 74 72 20 3d 20 54 63 6c 5f 47 65 74 4f 62 6a Ptr = Tcl_GetObj
0cc0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0d Result(interp);.
0cd0: 0a 2b 20 09 20 20 20 20 2f 2f 65 6c 73 65 0d 0a .+ . //else..
0ce0: 2b 20 09 20 20 20 20 2f 2f 20 20 20 20 73 72 76 + . // srv
0cf0: 4c 69 73 74 50 74 72 20 3d 20 54 63 6c 5f 4e 65 ListPtr = Tcl_Ne
0d00: 77 4c 69 73 74 4f 62 6a 28 30 2c 20 4e 55 4c 4c wListObj(0, NULL
0d10: 29 3b 0d 0a 2b 20 09 20 20 20 20 69 66 20 28 72 );..+ . if (r
0d20: 20 3d 3d 20 54 43 4c 5f 4f 4b 29 0d 0a 2b 20 09 == TCL_OK)..+ .
0d30: 20 20 20 20 20 20 20 20 72 20 3d 20 54 63 6c 5f r = Tcl_
0d40: 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e ListObjGetElemen
0d50: 74 73 28 69 6e 74 65 72 70 2c 20 73 72 76 4c 69 ts(interp, srvLi
0d60: 73 74 50 74 72 2c 20 26 73 72 76 43 6f 75 6e 74 stPtr, &srvCount
0d70: 2c 20 26 73 72 76 50 74 72 50 74 72 29 3b 0d 0a , &srvPtrPtr);..
0d80: 2b 20 20 20 20 20 20 20 20 20 69 66 20 28 72 20 + if (r
0d90: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0d 0a 2b 20 != TCL_OK) {..+
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 4f 75 74 70 Outp
0db0: 75 74 44 65 62 75 67 53 74 72 69 6e 67 28 54 63 utDebugString(Tc
0dc0: 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c l_GetStringResul
0dd0: 74 28 69 6e 74 65 72 70 29 29 3b 0d 0a 2b 20 20 t(interp));..+
0de0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
0df0: 6e 20 4e 55 4c 4c 3b 0d 0a 2b 20 20 20 20 20 20 n NULL;..+
0e00: 20 20 20 7d 0d 0a 2b 20 09 0d 0a 2b 20 09 2f 2a }..+ ...+ ./*
0e10: 0d 0a 2b 20 09 20 2a 20 50 69 63 6b 20 61 20 6e ..+ . * Pick a n
0e20: 61 6d 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 ame to use for t
0e30: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20 he application.
0e40: 20 55 73 65 20 22 6e 61 6d 65 22 20 69 66 20 69 Use "name" if i
0e50: 74 27 73 20 6e 6f 74 0d 0a 2b 20 09 20 2a 20 61 t's not..+ . * a
0e60: 6c 72 65 61 64 79 20 69 6e 20 75 73 65 2e 20 20 lready in use.
0e70: 4f 74 68 65 72 77 69 73 65 20 61 64 64 20 61 20 Otherwise add a
0e80: 73 75 66 66 69 78 20 73 75 63 68 20 61 73 20 22 suffix such as "
0e90: 20 23 32 22 2c 20 74 72 79 69 6e 67 0d 0a 2b 20 #2", trying..+
0ea0: 09 20 2a 20 6c 61 72 67 65 72 20 61 6e 64 20 6c . * larger and l
0eb0: 61 72 67 65 72 20 6e 75 6d 62 65 72 73 20 75 6e arger numbers un
0ec0: 74 69 6c 20 77 65 20 65 76 65 6e 74 75 61 6c 6c til we eventuall
0ed0: 79 20 66 69 6e 64 20 6f 6e 65 20 74 68 61 74 20 y find one that
0ee0: 69 73 0d 0a 2b 20 09 20 2a 20 75 6e 69 71 75 65 is..+ . * unique
0ef0: 2e 0d 0a 2b 20 09 20 2a 2f 0d 0a 2b 20 09 0d 0a ...+ . */..+ ...
0f00: 2b 20 09 6f 66 66 73 65 74 20 3d 20 6c 61 73 74 + .offset = last
0f10: 53 75 66 66 69 78 20 3d 20 30 3b 0d 0a 2b 20 09 Suffix = 0;..+ .
0f20: 73 75 66 66 69 78 20 3d 20 31 3b 0d 0a 2b 20 09 suffix = 1;..+ .
0f30: 0d 0a 2b 20 09 77 68 69 6c 65 20 28 73 75 66 66 ..+ .while (suff
0f40: 69 78 20 21 3d 20 6c 61 73 74 53 75 66 66 69 78 ix != lastSuffix
0f50: 29 20 7b 0d 0a 2b 20 09 20 20 20 20 6c 61 73 74 ) {..+ . last
0f60: 53 75 66 66 69 78 20 3d 20 73 75 66 66 69 78 3b Suffix = suffix;
0f70: 0d 0a 2b 20 09 20 20 20 20 69 66 20 28 73 75 66 ..+ . if (suf
0f80: 66 69 78 20 3e 20 31 29 20 7b 0d 0a 2b 20 09 09 fix > 1) {..+ ..
0f90: 69 66 20 28 73 75 66 66 69 78 20 3d 3d 20 32 29 if (suffix == 2)
0fa0: 20 7b 0d 0a 2b 20 09 09 20 20 20 20 54 63 6c 5f {..+ .. Tcl_
0fb0: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 28 26 64 DStringAppend(&d
0fc0: 53 74 72 69 6e 67 2c 20 6e 61 6d 65 2c 20 2d 31 String, name, -1
0fd0: 29 3b 0d 0a 2b 20 09 09 20 20 20 20 54 63 6c 5f );..+ .. Tcl_
0fe0: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 28 26 64 DStringAppend(&d
0ff0: 53 74 72 69 6e 67 2c 20 22 20 23 22 2c 20 32 29 String, " #", 2)
1000: 3b 0d 0a 2b 20 09 09 20 20 20 20 6f 66 66 73 65 ;..+ .. offse
1010: 74 20 3d 20 54 63 6c 5f 44 53 74 72 69 6e 67 4c t = Tcl_DStringL
1020: 65 6e 67 74 68 28 26 64 53 74 72 69 6e 67 29 3b ength(&dString);
1030: 0d 0a 2b 20 09 09 20 20 20 20 54 63 6c 5f 44 53 ..+ .. Tcl_DS
1040: 74 72 69 6e 67 53 65 74 4c 65 6e 67 74 68 28 26 tringSetLength(&
1050: 64 53 74 72 69 6e 67 2c 20 6f 66 66 73 65 74 20 dString, offset
1060: 2b 20 54 43 4c 5f 49 4e 54 45 47 45 52 5f 53 50 + TCL_INTEGER_SP
1070: 41 43 45 29 3b 0d 0a 2b 20 09 09 20 20 20 20 61 ACE);..+ .. a
1080: 63 74 75 61 6c 4e 61 6d 65 20 3d 20 54 63 6c 5f ctualName = Tcl_
1090: 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 64 53 DStringValue(&dS
10a0: 74 72 69 6e 67 29 3b 0d 0a 2b 20 09 09 7d 0d 0a tring);..+ ..}..
10b0: 2b 20 09 09 73 70 72 69 6e 74 66 28 54 63 6c 5f + ..sprintf(Tcl_
10c0: 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 64 53 DStringValue(&dS
10d0: 74 72 69 6e 67 29 20 2b 20 6f 66 66 73 65 74 2c tring) + offset,
10e0: 20 22 25 64 22 2c 20 73 75 66 66 69 78 29 3b 0d "%d", suffix);.
10f0: 0a 2b 20 09 20 20 20 20 7d 0d 0a 2b 20 09 20 20 .+ . }..+ .
1100: 20 20 0d 0a 2b 20 09 20 20 20 20 2f 2a 20 73 65 ..+ . /* se
1110: 65 20 69 66 20 74 68 65 20 6e 61 6d 65 20 69 73 e if the name is
1120: 20 61 6c 72 65 61 64 79 20 69 6e 20 75 73 65 2c already in use,
1130: 20 69 66 20 73 6f 20 69 6e 63 72 65 6d 65 6e 74 if so increment
1140: 20 73 75 66 66 69 78 20 2a 2f 0d 0a 2b 20 09 20 suffix */..+ .
1150: 20 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e for (n = 0; n
1160: 20 3c 20 73 72 76 43 6f 75 6e 74 3b 20 2b 2b 6e < srvCount; ++n
1170: 29 20 7b 0d 0a 2b 20 09 09 54 63 6c 5f 4f 62 6a ) {..+ ..Tcl_Obj
1180: 2a 20 6e 61 6d 65 50 74 72 3b 0d 0a 2b 20 09 09 * namePtr;..+ ..
1190: 0d 0a 2b 20 09 09 54 63 6c 5f 4c 69 73 74 4f 62 ..+ ..Tcl_ListOb
11a0: 6a 49 6e 64 65 78 28 69 6e 74 65 72 70 2c 20 73 jIndex(interp, s
11b0: 72 76 50 74 72 50 74 72 5b 6e 5d 2c 20 31 2c 20 rvPtrPtr[n], 1,
11c0: 26 6e 61 6d 65 50 74 72 29 3b 0d 0a 2b 20 09 09 &namePtr);..+ ..
11d0: 69 66 20 28 73 74 72 63 6d 70 28 61 63 74 75 61 if (strcmp(actua
11e0: 6c 4e 61 6d 65 2c 20 54 63 6c 5f 47 65 74 53 74 lName, Tcl_GetSt
11f0: 72 69 6e 67 28 6e 61 6d 65 50 74 72 29 29 20 3d ring(namePtr)) =
1200: 3d 20 30 29 0d 0a 2b 20 09 09 7b 0d 0a 2b 20 09 = 0)..+ ..{..+ .
1210: 09 20 20 20 20 73 75 66 66 69 78 2b 2b 3b 0d 0a . suffix++;..
1220: 2b 20 09 09 20 20 20 20 62 72 65 61 6b 3b 0d 0a + .. break;..
1230: 2b 20 09 09 7d 0d 0a 2b 20 09 20 20 20 20 7d 0d + ..}..+ . }.
1240: 0a 2b 20 09 7d 0d 0a 2b 20 20 20 20 20 7d 0d 0a .+ .}..+ }..
1250: 20 20 0d 0a 20 20 20 20 20 20 2f 2a 0d 0a 20 20 .. /*..
1260: 20 20 20 20 20 2a 20 57 65 20 68 61 76 65 20 66 * We have f
1270: 6f 75 6e 64 20 61 20 75 6e 69 71 75 65 20 6e 61 ound a unique na
1280: 6d 65 2e 20 4e 6f 77 20 61 64 64 20 69 74 20 74 me. Now add it t
1290: 6f 20 74 68 65 20 72 65 67 69 73 74 72 79 2e 0d o the registry..
12a0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .***************
12b0: 0d 0a 2a 2a 2a 20 32 39 31 2c 33 30 30 20 2a 2a ..*** 291,300 **
12c0: 2a 2a 0d 0a 20 20 0d 0a 20 20 20 20 20 20 72 69 **.. .. ri
12d0: 50 74 72 20 3d 20 28 52 65 67 69 73 74 65 72 65 Ptr = (Registere
12e0: 64 49 6e 74 65 72 70 20 2a 29 20 63 6b 61 6c 6c dInterp *) ckall
12f0: 6f 63 28 73 69 7a 65 6f 66 28 52 65 67 69 73 74 oc(sizeof(Regist
1300: 65 72 65 64 49 6e 74 65 72 70 29 29 3b 0d 0a 20 eredInterp));..
1310: 20 20 20 20 20 72 69 50 74 72 2d 3e 69 6e 74 65 riPtr->inte
1320: 72 70 20 3d 20 69 6e 74 65 72 70 3b 0d 0a 21 20 rp = interp;..!
1330: 20 20 20 20 72 69 50 74 72 2d 3e 6e 61 6d 65 20 riPtr->name
1340: 3d 20 63 6b 61 6c 6c 6f 63 28 73 74 72 6c 65 6e = ckalloc(strlen
1350: 28 6e 61 6d 65 29 20 2b 20 31 29 3b 0d 0a 20 20 (name) + 1);..
1360: 20 20 20 20 72 69 50 74 72 2d 3e 6e 65 78 74 50 riPtr->nextP
1370: 74 72 20 3d 20 74 73 64 50 74 72 2d 3e 69 6e 74 tr = tsdPtr->int
1380: 65 72 70 4c 69 73 74 50 74 72 3b 0d 0a 20 20 20 erpListPtr;..
1390: 20 20 20 74 73 64 50 74 72 2d 3e 69 6e 74 65 72 tsdPtr->inter
13a0: 70 4c 69 73 74 50 74 72 20 3d 20 72 69 50 74 72 pListPtr = riPtr
13b0: 3b 0d 0a 21 20 20 20 20 20 73 74 72 63 70 79 28 ;..! strcpy(
13c0: 72 69 50 74 72 2d 3e 6e 61 6d 65 2c 20 6e 61 6d riPtr->name, nam
13d0: 65 29 3b 0d 0a 20 20 0d 0a 20 20 20 20 20 20 54 e);.. .. T
13e0: 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d cl_CreateObjComm
13f0: 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 64 64 65 and(interp, "dde
1400: 22 2c 20 54 63 6c 5f 44 64 65 4f 62 6a 43 6d 64 ", Tcl_DdeObjCmd
1410: 2c 0d 0a 20 20 09 20 20 20 20 28 43 6c 69 65 6e ,.. . (Clien
1420: 74 44 61 74 61 29 20 72 69 50 74 72 2c 20 44 65 tData) riPtr, De
1430: 6c 65 74 65 50 72 6f 63 29 3b 0d 0a 2d 2d 2d 20 leteProc);..---
1440: 33 34 38 2c 33 35 37 20 2d 2d 2d 2d 0d 0a 20 20 348,357 ----..
1450: 0d 0a 20 20 20 20 20 20 72 69 50 74 72 20 3d 20 .. riPtr =
1460: 28 52 65 67 69 73 74 65 72 65 64 49 6e 74 65 72 (RegisteredInter
1470: 70 20 2a 29 20 63 6b 61 6c 6c 6f 63 28 73 69 7a p *) ckalloc(siz
1480: 65 6f 66 28 52 65 67 69 73 74 65 72 65 64 49 6e eof(RegisteredIn
1490: 74 65 72 70 29 29 3b 0d 0a 20 20 20 20 20 20 72 terp));.. r
14a0: 69 50 74 72 2d 3e 69 6e 74 65 72 70 20 3d 20 69 iPtr->interp = i
14b0: 6e 74 65 72 70 3b 0d 0a 21 20 20 20 20 20 72 69 nterp;..! ri
14c0: 50 74 72 2d 3e 6e 61 6d 65 20 3d 20 63 6b 61 6c Ptr->name = ckal
14d0: 6c 6f 63 28 73 74 72 6c 65 6e 28 61 63 74 75 61 loc(strlen(actua
14e0: 6c 4e 61 6d 65 29 20 2b 20 31 29 3b 0d 0a 20 20 lName) + 1);..
14f0: 20 20 20 20 72 69 50 74 72 2d 3e 6e 65 78 74 50 riPtr->nextP
1500: 74 72 20 3d 20 74 73 64 50 74 72 2d 3e 69 6e 74 tr = tsdPtr->int
1510: 65 72 70 4c 69 73 74 50 74 72 3b 0d 0a 20 20 20 erpListPtr;..
1520: 20 20 20 74 73 64 50 74 72 2d 3e 69 6e 74 65 72 tsdPtr->inter
1530: 70 4c 69 73 74 50 74 72 20 3d 20 72 69 50 74 72 pListPtr = riPtr
1540: 3b 0d 0a 21 20 20 20 20 20 73 74 72 63 70 79 28 ;..! strcpy(
1550: 72 69 50 74 72 2d 3e 6e 61 6d 65 2c 20 61 63 74 riPtr->name, act
1560: 75 61 6c 4e 61 6d 65 29 3b 0d 0a 20 20 0d 0a 20 ualName);.. ..
1570: 20 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 4f Tcl_CreateO
1580: 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 bjCommand(interp
1590: 2c 20 22 64 64 65 22 2c 20 54 63 6c 5f 44 64 65 , "dde", Tcl_Dde
15a0: 4f 62 6a 43 6d 64 2c 0d 0a 20 20 09 20 20 20 20 ObjCmd,.. .
15b0: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 72 69 50 (ClientData) riP
15c0: 74 72 2c 20 44 65 6c 65 74 65 50 72 6f 63 29 3b tr, DeleteProc);
15d0: 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ..**************
15e0: 2a 0d 0a 2a 2a 2a 20 37 35 35 2c 37 36 30 20 2a *..*** 755,760 *
15f0: 2a 2a 2a 0d 0a 2d 2d 2d 20 38 31 32 2c 31 30 31 ***..--- 812,101
1600: 38 20 2d 2d 2d 2d 0d 0a 20 20 2f 2a 0d 0a 20 20 8 ----.. /*..
1610: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
1620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1650: 0d 0a 20 20 20 2a 0d 0a 2b 20 20 2a 20 44 64 65 .. *..+ * Dde
1660: 47 65 74 53 65 72 76 69 63 65 73 4c 69 73 74 20 GetServicesList
1670: 2d 2d 0d 0a 2b 20 20 2a 0d 0a 2b 20 20 2a 09 54 --..+ *..+ *.T
1680: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6f 62 his procedure ob
1690: 74 61 69 6e 73 20 74 68 65 20 6c 69 73 74 20 6f tains the list o
16a0: 66 20 44 44 45 20 73 65 72 76 69 63 65 73 2e 0d f DDE services..
16b0: 0a 2b 20 20 2a 0d 0a 2b 20 20 2a 20 52 65 73 75 .+ *..+ * Resu
16c0: 6c 74 73 3a 0d 0a 2b 20 20 2a 09 41 20 73 74 61 lts:..+ *.A sta
16d0: 6e 64 61 72 64 20 54 63 6c 20 72 65 73 75 6c 74 ndard Tcl result
16e0: 2e 0d 0a 2b 20 20 2a 0d 0a 2b 20 20 2a 20 53 69 ...+ *..+ * Si
16f0: 64 65 20 65 66 66 65 63 74 73 3a 0d 0a 2b 20 20 de effects:..+
1700: 2a 09 53 65 74 73 20 74 68 65 20 73 65 72 76 69 *.Sets the servi
1710: 63 65 73 20 6c 69 73 74 20 69 6e 74 6f 20 74 68 ces list into th
1720: 65 20 69 6e 74 65 72 70 20 72 65 73 75 6c 74 2e e interp result.
1730: 0d 0a 2b 20 20 2a 0d 0a 2b 20 20 2a 2d 2d 2d 2d ..+ *..+ *----
1740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2b 20 20 2a ----------..+ *
1780: 2f 0d 0a 2b 20 0d 0a 2b 20 23 69 66 64 65 66 20 /..+ ..+ #ifdef
1790: 4f 52 49 47 49 4e 41 4c 5f 53 45 52 56 49 43 45 ORIGINAL_SERVICE
17a0: 53 5f 43 4f 44 45 0d 0a 2b 20 0d 0a 2b 20 73 74 S_CODE..+ ..+ st
17b0: 61 74 69 63 20 69 6e 74 0d 0a 2b 20 44 64 65 47 atic int..+ DdeG
17c0: 65 74 53 65 72 76 69 63 65 73 4c 69 73 74 28 54 etServicesList(T
17d0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
17e0: 70 2c 20 63 68 61 72 20 2a 73 65 72 76 69 63 65 p, char *service
17f0: 4e 61 6d 65 2c 20 63 68 61 72 20 2a 74 6f 70 69 Name, char *topi
1800: 63 4e 61 6d 65 29 0d 0a 2b 20 7b 0d 0a 2b 20 20 cName)..+ {..+
1810: 20 20 20 48 43 4f 4e 56 4c 49 53 54 20 68 43 6f HCONVLIST hCo
1820: 6e 76 4c 69 73 74 3b 0d 0a 2b 20 20 20 20 20 43 nvList;..+ C
1830: 4f 4e 56 49 4e 46 4f 20 63 6f 6e 76 49 6e 66 6f ONVINFO convInfo
1840: 3b 0d 0a 2b 20 20 20 20 20 48 43 4f 4e 56 20 68 ;..+ HCONV h
1850: 43 6f 6e 76 20 3d 20 4e 55 4c 4c 3b 0d 0a 2b 20 Conv = NULL;..+
1860: 20 20 20 20 48 53 5a 20 64 64 65 53 65 72 76 69 HSZ ddeServi
1870: 63 65 20 3d 20 4e 55 4c 4c 2c 20 64 64 65 54 6f ce = NULL, ddeTo
1880: 70 69 63 20 3d 20 4e 55 4c 4c 3b 0d 0a 2b 20 20 pic = NULL;..+
1890: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 76 Tcl_Obj *conv
18a0: 4c 69 73 74 4f 62 6a 50 74 72 2c 20 2a 65 6c 65 ListObjPtr, *ele
18b0: 6d 65 6e 74 4f 62 6a 50 74 72 3b 0d 0a 2b 20 20 mentObjPtr;..+
18c0: 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 64 Tcl_DString d
18d0: 53 74 72 69 6e 67 3b 0d 0a 2b 20 20 20 20 20 63 String;..+ c
18e0: 68 61 72 20 2a 6e 61 6d 65 3b 0d 0a 2b 20 20 20 har *name;..+
18f0: 20 20 69 6e 74 20 6c 65 6e 67 74 68 2c 20 72 65 int length, re
1900: 73 75 6c 74 20 3d 20 54 43 4c 5f 4f 4b 3b 0d 0a sult = TCL_OK;..
1910: 2b 20 0d 0a 2b 20 20 20 20 20 69 66 20 28 73 65 + ..+ if (se
1920: 72 76 69 63 65 4e 61 6d 65 29 0d 0a 2b 20 09 64 rviceName)..+ .d
1930: 64 65 53 65 72 76 69 63 65 20 3d 20 44 64 65 43 deService = DdeC
1940: 72 65 61 74 65 53 74 72 69 6e 67 48 61 6e 64 6c reateStringHandl
1950: 65 28 64 64 65 49 6e 73 74 61 6e 63 65 2c 20 73 e(ddeInstance, s
1960: 65 72 76 69 63 65 4e 61 6d 65 2c 20 43 50 5f 57 erviceName, CP_W
1970: 49 4e 41 4e 53 49 29 3b 0d 0a 2b 20 20 20 20 20 INANSI);..+
1980: 69 66 20 28 74 6f 70 69 63 4e 61 6d 65 29 0d 0a if (topicName)..
1990: 2b 20 09 64 64 65 54 6f 70 69 63 20 3d 20 44 64 + .ddeTopic = Dd
19a0: 65 43 72 65 61 74 65 53 74 72 69 6e 67 48 61 6e eCreateStringHan
19b0: 64 6c 65 28 64 64 65 49 6e 73 74 61 6e 63 65 2c dle(ddeInstance,
19c0: 20 20 74 6f 70 69 63 4e 61 6d 65 2c 20 43 50 5f topicName, CP_
19d0: 57 49 4e 41 4e 53 49 29 3b 0d 0a 2b 20 20 20 20 WINANSI);..+
19e0: 20 0d 0a 2b 20 20 20 20 20 63 6f 6e 76 49 6e 66 ..+ convInf
19f0: 6f 2e 63 62 20 3d 20 73 69 7a 65 6f 66 28 43 4f o.cb = sizeof(CO
1a00: 4e 56 49 4e 46 4f 29 3b 0d 0a 2b 20 20 20 20 20 NVINFO);..+
1a10: 68 43 6f 6e 76 4c 69 73 74 20 3d 20 44 64 65 43 hConvList = DdeC
1a20: 6f 6e 6e 65 63 74 4c 69 73 74 28 64 64 65 49 6e onnectList(ddeIn
1a30: 73 74 61 6e 63 65 2c 20 64 64 65 53 65 72 76 69 stance, ddeServi
1a40: 63 65 2c 20 64 64 65 54 6f 70 69 63 2c 20 30 2c ce, ddeTopic, 0,
1a50: 20 4e 55 4c 4c 29 3b 0d 0a 2b 20 20 20 20 20 44 NULL);..+ D
1a60: 64 65 46 72 65 65 53 74 72 69 6e 67 48 61 6e 64 deFreeStringHand
1a70: 6c 65 28 64 64 65 49 6e 73 74 61 6e 63 65 2c 20 le(ddeInstance,
1a80: 64 64 65 53 65 72 76 69 63 65 29 3b 0d 0a 2b 20 ddeService);..+
1a90: 20 20 20 20 44 64 65 46 72 65 65 53 74 72 69 6e DdeFreeStrin
1aa0: 67 48 61 6e 64 6c 65 28 64 64 65 49 6e 73 74 61 gHandle(ddeInsta
1ab0: 6e 63 65 2c 20 64 64 65 54 6f 70 69 63 29 3b 0d nce, ddeTopic);.
1ac0: 0a 2b 20 20 20 20 20 68 43 6f 6e 76 20 3d 20 30 .+ hConv = 0
1ad0: 3b 0d 0a 2b 20 20 20 20 20 63 6f 6e 76 4c 69 73 ;..+ convLis
1ae0: 74 4f 62 6a 50 74 72 20 3d 20 54 63 6c 5f 4e 65 tObjPtr = Tcl_Ne
1af0: 77 4c 69 73 74 4f 62 6a 28 30 2c 20 28 54 63 6c wListObj(0, (Tcl
1b00: 5f 4f 62 6a 20 2a 2a 29 20 4e 55 4c 4c 29 3b 0d _Obj **) NULL);.
1b10: 0a 2b 20 20 20 20 20 54 63 6c 5f 44 53 74 72 69 .+ Tcl_DStri
1b20: 6e 67 49 6e 69 74 28 26 64 53 74 72 69 6e 67 29 ngInit(&dString)
1b30: 3b 0d 0a 2b 20 20 20 20 20 0d 0a 2b 20 20 20 20 ;..+ ..+
1b40: 20 77 68 69 6c 65 20 28 68 43 6f 6e 76 20 3d 20 while (hConv =
1b50: 44 64 65 51 75 65 72 79 4e 65 78 74 53 65 72 76 DdeQueryNextServ
1b60: 65 72 28 68 43 6f 6e 76 4c 69 73 74 2c 20 68 43 er(hConvList, hC
1b70: 6f 6e 76 29 2c 20 68 43 6f 6e 76 20 21 3d 20 30 onv), hConv != 0
1b80: 29 20 7b 0d 0a 2b 20 09 65 6c 65 6d 65 6e 74 4f ) {..+ .elementO
1b90: 62 6a 50 74 72 20 3d 20 54 63 6c 5f 4e 65 77 4c bjPtr = Tcl_NewL
1ba0: 69 73 74 4f 62 6a 28 30 2c 20 28 54 63 6c 5f 4f istObj(0, (Tcl_O
1bb0: 62 6a 20 2a 2a 29 20 4e 55 4c 4c 29 3b 0d 0a 2b bj **) NULL);..+
1bc0: 20 09 44 64 65 51 75 65 72 79 43 6f 6e 76 49 6e .DdeQueryConvIn
1bd0: 66 6f 28 68 43 6f 6e 76 2c 20 51 49 44 5f 53 59 fo(hConv, QID_SY
1be0: 4e 43 2c 20 26 63 6f 6e 76 49 6e 66 6f 29 3b 0d NC, &convInfo);.
1bf0: 0a 2b 20 09 6c 65 6e 67 74 68 20 3d 20 44 64 65 .+ .length = Dde
1c00: 51 75 65 72 79 53 74 72 69 6e 67 28 64 64 65 49 QueryString(ddeI
1c10: 6e 73 74 61 6e 63 65 2c 20 0d 0a 2b 20 09 09 63 nstance, ..+ ..c
1c20: 6f 6e 76 49 6e 66 6f 2e 68 73 7a 53 76 63 50 61 onvInfo.hszSvcPa
1c30: 72 74 6e 65 72 2c 20 4e 55 4c 4c 2c 20 30 2c 20 rtner, NULL, 0,
1c40: 43 50 5f 57 49 4e 41 4e 53 49 29 3b 0d 0a 2b 20 CP_WINANSI);..+
1c50: 09 54 63 6c 5f 44 53 74 72 69 6e 67 53 65 74 4c .Tcl_DStringSetL
1c60: 65 6e 67 74 68 28 26 64 53 74 72 69 6e 67 2c 20 ength(&dString,
1c70: 6c 65 6e 67 74 68 29 3b 0d 0a 2b 20 09 6e 61 6d length);..+ .nam
1c80: 65 20 3d 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 e = Tcl_DStringV
1c90: 61 6c 75 65 28 26 64 53 74 72 69 6e 67 29 3b 0d alue(&dString);.
1ca0: 0a 2b 20 09 44 64 65 51 75 65 72 79 53 74 72 69 .+ .DdeQueryStri
1cb0: 6e 67 28 64 64 65 49 6e 73 74 61 6e 63 65 2c 20 ng(ddeInstance,
1cc0: 63 6f 6e 76 49 6e 66 6f 2e 68 73 7a 53 76 63 50 convInfo.hszSvcP
1cd0: 61 72 74 6e 65 72 2c 20 0d 0a 2b 20 09 09 6e 61 artner, ..+ ..na
1ce0: 6d 65 2c 20 28 44 57 4f 52 44 29 20 6c 65 6e 67 me, (DWORD) leng
1cf0: 74 68 20 2b 20 31 2c 20 43 50 5f 57 49 4e 41 4e th + 1, CP_WINAN
1d00: 53 49 29 3b 0d 0a 2b 20 09 54 63 6c 5f 4c 69 73 SI);..+ .Tcl_Lis
1d10: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e tObjAppendElemen
1d20: 74 28 69 6e 74 65 72 70 2c 20 65 6c 65 6d 65 6e t(interp, elemen
1d30: 74 4f 62 6a 50 74 72 2c 0d 0a 2b 20 09 09 54 63 tObjPtr,..+ ..Tc
1d40: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 6e l_NewStringObj(n
1d50: 61 6d 65 2c 20 6c 65 6e 67 74 68 29 29 3b 0d 0a ame, length));..
1d60: 2b 20 09 6c 65 6e 67 74 68 20 3d 20 44 64 65 51 + .length = DdeQ
1d70: 75 65 72 79 53 74 72 69 6e 67 28 64 64 65 49 6e ueryString(ddeIn
1d80: 73 74 61 6e 63 65 2c 20 63 6f 6e 76 49 6e 66 6f stance, convInfo
1d90: 2e 68 73 7a 54 6f 70 69 63 2c 0d 0a 2b 20 09 09 .hszTopic,..+ ..
1da0: 4e 55 4c 4c 2c 20 30 2c 20 43 50 5f 57 49 4e 41 NULL, 0, CP_WINA
1db0: 4e 53 49 29 3b 0d 0a 2b 20 09 54 63 6c 5f 44 53 NSI);..+ .Tcl_DS
1dc0: 74 72 69 6e 67 53 65 74 4c 65 6e 67 74 68 28 26 tringSetLength(&
1dd0: 64 53 74 72 69 6e 67 2c 20 6c 65 6e 67 74 68 29 dString, length)
1de0: 3b 0d 0a 2b 20 09 6e 61 6d 65 20 3d 20 54 63 6c ;..+ .name = Tcl
1df0: 5f 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 64 _DStringValue(&d
1e00: 53 74 72 69 6e 67 29 3b 0d 0a 2b 20 09 44 64 65 String);..+ .Dde
1e10: 51 75 65 72 79 53 74 72 69 6e 67 28 64 64 65 49 QueryString(ddeI
1e20: 6e 73 74 61 6e 63 65 2c 20 63 6f 6e 76 49 6e 66 nstance, convInf
1e30: 6f 2e 68 73 7a 54 6f 70 69 63 2c 20 6e 61 6d 65 o.hszTopic, name
1e40: 2c 0d 0a 2b 20 09 09 28 44 57 4f 52 44 29 20 6c ,..+ ..(DWORD) l
1e50: 65 6e 67 74 68 20 2b 20 31 2c 20 43 50 5f 57 49 ength + 1, CP_WI
1e60: 4e 41 4e 53 49 29 3b 0d 0a 2b 20 09 54 63 6c 5f NANSI);..+ .Tcl_
1e70: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 ListObjAppendEle
1e80: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 65 6c 65 ment(interp, ele
1e90: 6d 65 6e 74 4f 62 6a 50 74 72 2c 0d 0a 2b 20 09 mentObjPtr,..+ .
1ea0: 09 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 .Tcl_NewStringOb
1eb0: 6a 28 6e 61 6d 65 2c 20 6c 65 6e 67 74 68 29 29 j(name, length))
1ec0: 3b 0d 0a 2b 20 09 54 63 6c 5f 4c 69 73 74 4f 62 ;..+ .Tcl_ListOb
1ed0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 jAppendElement(i
1ee0: 6e 74 65 72 70 2c 20 63 6f 6e 76 4c 69 73 74 4f nterp, convListO
1ef0: 62 6a 50 74 72 2c 0d 0a 2b 20 09 09 65 6c 65 6d bjPtr,..+ ..elem
1f00: 65 6e 74 4f 62 6a 50 74 72 29 3b 0d 0a 2b 20 20 entObjPtr);..+
1f10: 20 20 20 7d 0d 0a 2b 20 20 20 20 20 44 64 65 44 }..+ DdeD
1f20: 69 73 63 6f 6e 6e 65 63 74 4c 69 73 74 28 68 43 isconnectList(hC
1f30: 6f 6e 76 4c 69 73 74 29 3b 0d 0a 2b 20 20 20 20 onvList);..+
1f40: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c Tcl_SetObjResul
1f50: 74 28 69 6e 74 65 72 70 2c 20 63 6f 6e 76 4c 69 t(interp, convLi
1f60: 73 74 4f 62 6a 50 74 72 29 3b 0d 0a 2b 20 20 20 stObjPtr);..+
1f70: 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 Tcl_DStringFre
1f80: 65 28 26 64 53 74 72 69 6e 67 29 3b 0d 0a 2b 20 e(&dString);..+
1f90: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c return resul
1fa0: 74 3b 0d 0a 2b 20 7d 0d 0a 2b 20 0d 0a 2b 20 23 t;..+ }..+ ..+ #
1fb0: 65 6c 73 65 20 2f 2a 20 21 20 4f 52 49 47 49 4e else /* ! ORIGIN
1fc0: 41 4c 5f 53 45 52 56 49 43 45 53 5f 43 4f 44 45 AL_SERVICES_CODE
1fd0: 20 2a 2f 0d 0a 2b 20 0d 0a 2b 20 74 79 70 65 64 */..+ ..+ typed
1fe0: 65 66 20 73 74 72 75 63 74 20 64 64 65 45 6e 75 ef struct ddeEnu
1ff0: 6d 53 65 72 76 69 63 65 73 20 7b 0d 0a 2b 20 20 mServices {..+
2000: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 Tcl_Interp *i
2010: 6e 74 65 72 70 3b 0d 0a 2b 20 20 20 20 20 69 6e nterp;..+ in
2020: 74 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 t result
2030: 3b 0d 0a 2b 20 20 20 20 20 41 54 4f 4d 20 20 20 ;..+ ATOM
2040: 20 20 20 20 20 73 65 72 76 69 63 65 3b 0d 0a 2b service;..+
2050: 20 20 20 20 20 41 54 4f 4d 20 20 20 20 20 20 20 ATOM
2060: 20 74 6f 70 69 63 3b 0d 0a 2b 20 20 20 20 20 48 topic;..+ H
2070: 57 4e 44 20 20 20 20 20 20 20 20 68 77 6e 64 3b WND hwnd;
2080: 0d 0a 2b 20 7d 20 64 64 65 45 6e 75 6d 53 65 72 ..+ } ddeEnumSer
2090: 76 69 63 65 73 3b 0d 0a 2b 20 0d 0a 2b 20 4c 52 vices;..+ ..+ LR
20a0: 45 53 55 4c 54 20 43 41 4c 4c 42 41 43 4b 0d 0a ESULT CALLBACK..
20b0: 2b 20 44 64 65 43 6c 69 65 6e 74 57 69 6e 64 6f + DdeClientWindo
20c0: 77 50 72 6f 63 28 48 57 4e 44 20 68 77 6e 64 2c wProc(HWND hwnd,
20d0: 20 55 49 4e 54 20 75 4d 73 67 2c 20 57 50 41 52 UINT uMsg, WPAR
20e0: 41 4d 20 77 50 61 72 61 6d 2c 20 4c 50 41 52 41 AM wParam, LPARA
20f0: 4d 20 6c 50 61 72 61 6d 29 3b 0d 0a 2b 20 73 74 M lParam);..+ st
2100: 61 74 69 63 20 4c 52 45 53 55 4c 54 0d 0a 2b 20 atic LRESULT..+
2110: 44 64 65 53 65 72 76 69 63 65 73 4f 6e 41 63 6b DdeServicesOnAck
2120: 28 48 57 4e 44 20 68 77 6e 64 2c 20 57 50 41 52 (HWND hwnd, WPAR
2130: 41 4d 20 77 50 61 72 61 6d 2c 20 4c 50 41 52 41 AM wParam, LPARA
2140: 4d 20 6c 50 61 72 61 6d 29 3b 0d 0a 2b 20 0d 0a M lParam);..+ ..
2150: 2b 20 73 74 61 74 69 63 20 69 6e 74 0d 0a 2b 20 + static int..+
2160: 44 64 65 43 72 65 61 74 65 43 6c 69 65 6e 74 28 DdeCreateClient(
2170: 64 64 65 45 6e 75 6d 53 65 72 76 69 63 65 73 20 ddeEnumServices
2180: 2a 65 73 29 0d 0a 2b 20 7b 0d 0a 2b 20 20 20 20 *es)..+ {..+
2190: 20 57 4e 44 43 4c 41 53 53 45 58 20 77 63 3b 0d WNDCLASSEX wc;.
21a0: 0a 2b 20 20 20 20 20 73 74 61 74 69 63 20 63 6f .+ static co
21b0: 6e 73 74 20 63 68 61 72 20 2a 73 7a 44 64 65 43 nst char *szDdeC
21c0: 6c 69 65 6e 74 43 6c 61 73 73 4e 61 6d 65 20 3d lientClassName =
21d0: 20 22 54 63 6c 45 76 61 6c 20 63 6c 69 65 6e 74 "TclEval client
21e0: 20 63 6c 61 73 73 22 3b 0d 0a 2b 20 20 20 20 20 class";..+
21f0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 static const cha
2200: 72 20 2a 73 7a 44 64 65 43 6c 69 65 6e 74 57 69 r *szDdeClientWi
2210: 6e 64 6f 77 4e 61 6d 65 20 3d 20 22 54 63 6c 45 ndowName = "TclE
2220: 76 61 6c 20 63 6c 69 65 6e 74 20 77 69 6e 64 6f val client windo
2230: 77 22 3b 0d 0a 2b 20 0d 0a 2b 20 20 20 20 20 6d w";..+ ..+ m
2240: 65 6d 73 65 74 28 26 77 63 2c 20 30 2c 20 73 69 emset(&wc, 0, si
2250: 7a 65 6f 66 28 77 63 29 29 3b 0d 0a 2b 20 20 20 zeof(wc));..+
2260: 20 20 77 63 2e 63 62 53 69 7a 65 20 3d 20 73 69 wc.cbSize = si
2270: 7a 65 6f 66 28 77 63 29 3b 0d 0a 2b 20 20 20 20 zeof(wc);..+
2280: 20 77 63 2e 6c 70 66 6e 57 6e 64 50 72 6f 63 20 wc.lpfnWndProc
2290: 3d 20 44 64 65 43 6c 69 65 6e 74 57 69 6e 64 6f = DdeClientWindo
22a0: 77 50 72 6f 63 3b 0d 0a 2b 20 20 20 20 20 77 63 wProc;..+ wc
22b0: 2e 6c 70 73 7a 43 6c 61 73 73 4e 61 6d 65 20 3d .lpszClassName =
22c0: 20 73 7a 44 64 65 43 6c 69 65 6e 74 43 6c 61 73 szDdeClientClas
22d0: 73 4e 61 6d 65 3b 0d 0a 2b 20 20 20 20 20 77 63 sName;..+ wc
22e0: 2e 63 62 57 6e 64 45 78 74 72 61 20 3d 20 73 69 .cbWndExtra = si
22f0: 7a 65 6f 66 28 64 64 65 45 6e 75 6d 53 65 72 76 zeof(ddeEnumServ
2300: 69 63 65 73 2a 29 3b 0d 0a 2b 20 0d 0a 2b 20 20 ices*);..+ ..+
2310: 20 20 20 2f 2a 20 72 65 67 69 73 74 65 72 20 61 /* register a
2320: 6e 64 20 63 72 65 61 74 65 20 74 68 65 20 63 61 nd create the ca
2330: 6c 6c 62 61 63 6b 20 77 69 6e 64 6f 77 20 2a 2f llback window */
2340: 0d 0a 2b 20 20 20 20 20 52 65 67 69 73 74 65 72 ..+ Register
2350: 43 6c 61 73 73 45 78 28 26 77 63 29 3b 0d 0a 2b ClassEx(&wc);..+
2360: 20 20 20 20 20 65 73 2d 3e 68 77 6e 64 20 3d 20 es->hwnd =
2370: 43 72 65 61 74 65 57 69 6e 64 6f 77 45 78 28 30 CreateWindowEx(0
2380: 2c 20 73 7a 44 64 65 43 6c 69 65 6e 74 43 6c 61 , szDdeClientCla
2390: 73 73 4e 61 6d 65 2c 0d 0a 2b 20 09 09 09 20 20 ssName,..+ ...
23a0: 20 20 20 20 73 7a 44 64 65 43 6c 69 65 6e 74 57 szDdeClientW
23b0: 69 6e 64 6f 77 4e 61 6d 65 2c 0d 0a 2b 20 09 09 indowName,..+ ..
23c0: 09 20 20 20 20 20 20 57 53 5f 50 4f 50 55 50 2c . WS_POPUP,
23d0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 4e 55 4c 0, 0, 0, 0, NUL
23e0: 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 0d 0a L, NULL, NULL,..
23f0: 2b 20 09 09 09 20 20 20 20 20 20 28 4c 50 56 4f + ... (LPVO
2400: 49 44 29 65 73 29 3b 0d 0a 2b 20 20 20 20 20 72 ID)es);..+ r
2410: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0d 0a 2b eturn TCL_OK;..+
2420: 20 7d 0d 0a 2b 20 0d 0a 2b 20 4c 52 45 53 55 4c }..+ ..+ LRESUL
2430: 54 20 43 41 4c 4c 42 41 43 4b 0d 0a 2b 20 44 64 T CALLBACK..+ Dd
2440: 65 43 6c 69 65 6e 74 57 69 6e 64 6f 77 50 72 6f eClientWindowPro
2450: 63 28 48 57 4e 44 20 68 77 6e 64 2c 20 55 49 4e c(HWND hwnd, UIN
2460: 54 20 75 4d 73 67 2c 20 57 50 41 52 41 4d 20 77 T uMsg, WPARAM w
2470: 50 61 72 61 6d 2c 20 4c 50 41 52 41 4d 20 6c 50 Param, LPARAM lP
2480: 61 72 61 6d 29 0d 0a 2b 20 7b 0d 0a 2b 20 20 20 aram)..+ {..+
2490: 20 20 4c 4f 4e 47 20 6c 72 20 3d 20 30 4c 3b 0d LONG lr = 0L;.
24a0: 0a 2b 20 0d 0a 2b 20 20 20 20 20 73 77 69 74 63 .+ ..+ switc
24b0: 68 20 28 75 4d 73 67 29 20 7b 0d 0a 2b 20 09 63 h (uMsg) {..+ .c
24c0: 61 73 65 20 57 4d 5f 43 52 45 41 54 45 3a 20 7b ase WM_CREATE: {
24d0: 0d 0a 2b 20 09 20 20 20 20 4c 50 43 52 45 41 54 ..+ . LPCREAT
24e0: 45 53 54 52 55 43 54 20 6c 70 63 73 20 3d 20 28 ESTRUCT lpcs = (
24f0: 4c 50 43 52 45 41 54 45 53 54 52 55 43 54 29 6c LPCREATESTRUCT)l
2500: 50 61 72 61 6d 3b 0d 0a 2b 20 09 20 20 20 20 64 Param;..+ . d
2510: 64 65 45 6e 75 6d 53 65 72 76 69 63 65 73 20 2a deEnumServices *
2520: 65 73 3b 0d 0a 2b 20 09 20 20 20 20 65 73 20 3d es;..+ . es =
2530: 20 28 64 64 65 45 6e 75 6d 53 65 72 76 69 63 65 (ddeEnumService
2540: 73 2a 29 6c 70 63 73 2d 3e 6c 70 43 72 65 61 74 s*)lpcs->lpCreat
2550: 65 50 61 72 61 6d 73 3b 0d 0a 2b 20 09 20 20 20 eParams;..+ .
2560: 20 53 65 74 57 69 6e 64 6f 77 4c 6f 6e 67 28 68 SetWindowLong(h
2570: 77 6e 64 2c 20 47 57 4c 5f 55 53 45 52 44 41 54 wnd, GWL_USERDAT
2580: 41 2c 20 28 6c 6f 6e 67 29 65 73 29 3b 0d 0a 2b A, (long)es);..+
2590: 20 09 20 20 20 20 62 72 65 61 6b 3b 0d 0a 2b 20 . break;..+
25a0: 09 7d 0d 0a 2b 20 09 63 61 73 65 20 57 4d 5f 44 .}..+ .case WM_D
25b0: 44 45 5f 41 43 4b 3a 0d 0a 2b 20 09 20 20 20 20 DE_ACK:..+ .
25c0: 6c 72 20 3d 20 20 44 64 65 53 65 72 76 69 63 65 lr = DdeService
25d0: 73 4f 6e 41 63 6b 28 68 77 6e 64 2c 20 77 50 61 sOnAck(hwnd, wPa
25e0: 72 61 6d 2c 20 6c 50 61 72 61 6d 29 3b 0d 0a 2b ram, lParam);..+
25f0: 20 09 20 20 20 20 62 72 65 61 6b 3b 0d 0a 2b 20 . break;..+
2600: 09 64 65 66 61 75 6c 74 3a 0d 0a 2b 20 09 20 20 .default:..+ .
2610: 20 20 6c 72 20 3d 20 44 65 66 57 69 6e 64 6f 77 lr = DefWindow
2620: 50 72 6f 63 28 68 77 6e 64 2c 20 75 4d 73 67 2c Proc(hwnd, uMsg,
2630: 20 77 50 61 72 61 6d 2c 20 6c 50 61 72 61 6d 29 wParam, lParam)
2640: 3b 0d 0a 2b 20 20 20 20 20 7d 0d 0a 2b 20 20 20 ;..+ }..+
2650: 20 20 72 65 74 75 72 6e 20 6c 72 3b 0d 0a 2b 20 return lr;..+
2660: 7d 0d 0a 2b 20 0d 0a 2b 20 73 74 61 74 69 63 20 }..+ ..+ static
2670: 4c 52 45 53 55 4c 54 0d 0a 2b 20 44 64 65 53 65 LRESULT..+ DdeSe
2680: 72 76 69 63 65 73 4f 6e 41 63 6b 28 48 57 4e 44 rvicesOnAck(HWND
2690: 20 68 77 6e 64 2c 20 57 50 41 52 41 4d 20 77 50 hwnd, WPARAM wP
26a0: 61 72 61 6d 2c 20 4c 50 41 52 41 4d 20 6c 50 61 aram, LPARAM lPa
26b0: 72 61 6d 29 0d 0a 2b 20 7b 0d 0a 2b 20 20 20 20 ram)..+ {..+
26c0: 20 48 57 4e 44 20 68 77 6e 64 52 65 6d 6f 74 65 HWND hwndRemote
26d0: 20 3d 20 28 48 57 4e 44 29 77 50 61 72 61 6d 3b = (HWND)wParam;
26e0: 0d 0a 2b 20 20 20 20 20 41 54 4f 4d 20 73 65 72 ..+ ATOM ser
26f0: 76 69 63 65 20 3d 20 28 41 54 4f 4d 29 4c 4f 57 vice = (ATOM)LOW
2700: 4f 52 44 28 6c 50 61 72 61 6d 29 3b 0d 0a 2b 20 ORD(lParam);..+
2710: 20 20 20 20 41 54 4f 4d 20 74 6f 70 69 63 20 3d ATOM topic =
2720: 20 28 41 54 4f 4d 29 48 49 57 4f 52 44 28 6c 50 (ATOM)HIWORD(lP
2730: 61 72 61 6d 29 3b 0d 0a 2b 20 20 20 20 20 64 64 aram);..+ dd
2740: 65 45 6e 75 6d 53 65 72 76 69 63 65 73 20 2a 65 eEnumServices *e
2750: 73 3b 0d 0a 2b 20 20 20 20 20 54 43 48 41 52 20 s;..+ TCHAR
2760: 73 7a 5b 32 35 35 5d 3b 0d 0a 2b 20 20 20 20 20 sz[255];..+
2770: 0d 0a 2b 20 20 20 20 20 65 73 20 3d 20 28 64 64 ..+ es = (dd
2780: 65 45 6e 75 6d 53 65 72 76 69 63 65 73 20 2a 29 eEnumServices *)
2790: 47 65 74 57 69 6e 64 6f 77 4c 6f 6e 67 28 68 77 GetWindowLong(hw
27a0: 6e 64 2c 20 47 57 4c 5f 55 53 45 52 44 41 54 41 nd, GWL_USERDATA
27b0: 29 3b 0d 0a 2b 20 0d 0a 2b 20 20 20 20 20 69 66 );..+ ..+ if
27c0: 20 28 28 65 73 2d 3e 73 65 72 76 69 63 65 20 3d ((es->service =
27d0: 3d 20 28 41 54 4f 4d 29 4e 55 4c 4c 20 7c 7c 20 = (ATOM)NULL ||
27e0: 65 73 2d 3e 73 65 72 76 69 63 65 20 3d 3d 20 73 es->service == s
27f0: 65 72 76 69 63 65 29 0d 0a 2b 20 09 26 26 20 28 ervice)..+ .&& (
2800: 65 73 2d 3e 74 6f 70 69 63 20 3d 3d 20 28 41 54 es->topic == (AT
2810: 4f 4d 29 4e 55 4c 4c 20 7c 7c 20 65 73 2d 3e 74 OM)NULL || es->t
2820: 6f 70 69 63 20 3d 3d 20 74 6f 70 69 63 29 29 20 opic == topic))
2830: 7b 0d 0a 2b 20 09 54 63 6c 5f 4f 62 6a 20 2a 6d {..+ .Tcl_Obj *m
2840: 61 74 63 68 50 74 72 20 3d 20 54 63 6c 5f 4e 65 atchPtr = Tcl_Ne
2850: 77 4c 69 73 74 4f 62 6a 28 30 2c 20 4e 55 4c 4c wListObj(0, NULL
2860: 29 3b 0d 0a 2b 20 0d 0a 2b 20 09 47 6c 6f 62 61 );..+ ..+ .Globa
2870: 6c 47 65 74 41 74 6f 6d 4e 61 6d 65 28 73 65 72 lGetAtomName(ser
2880: 76 69 63 65 2c 20 73 7a 2c 20 32 35 35 29 3b 0d vice, sz, 255);.
2890: 0a 2b 20 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 .+ .Tcl_ListObjA
28a0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 65 73 2d ppendElement(es-
28b0: 3e 69 6e 74 65 72 70 2c 20 6d 61 74 63 68 50 74 >interp, matchPt
28c0: 72 2c 0d 0a 2b 20 09 09 09 09 20 54 63 6c 5f 4e r,..+ .... Tcl_N
28d0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 7a 2c 20 ewStringObj(sz,
28e0: 2d 31 29 29 3b 0d 0a 2b 20 09 47 6c 6f 62 61 6c -1));..+ .Global
28f0: 47 65 74 41 74 6f 6d 4e 61 6d 65 28 74 6f 70 69 GetAtomName(topi
2900: 63 2c 20 73 7a 2c 20 32 35 35 29 3b 0d 0a 2b 20 c, sz, 255);..+
2910: 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 .Tcl_ListObjAppe
2920: 6e 64 45 6c 65 6d 65 6e 74 28 65 73 2d 3e 69 6e ndElement(es->in
2930: 74 65 72 70 2c 20 6d 61 74 63 68 50 74 72 2c 0d terp, matchPtr,.
2940: 0a 2b 20 09 09 09 09 20 54 63 6c 5f 4e 65 77 53 .+ .... Tcl_NewS
2950: 74 72 69 6e 67 4f 62 6a 28 73 7a 2c 20 2d 31 29 tringObj(sz, -1)
2960: 29 3b 0d 0a 2b 20 20 20 20 20 54 63 6c 5f 4c 69 );..+ Tcl_Li
2970: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 stObjAppendEleme
2980: 6e 74 28 65 73 2d 3e 69 6e 74 65 72 70 2c 20 6d nt(es->interp, m
2990: 61 74 63 68 50 74 72 2c 0d 0a 2b 20 20 20 20 20 atchPtr,..+
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c Tcl
29b0: 5f 4e 65 77 4c 6f 6e 67 4f 62 6a 28 28 6c 6f 6e _NewLongObj((lon
29c0: 67 29 68 77 6e 64 52 65 6d 6f 74 65 29 29 3b 0d g)hwndRemote));.
29d0: 0a 2b 20 09 0d 0a 2b 20 09 54 63 6c 5f 4c 69 73 .+ ...+ .Tcl_Lis
29e0: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e tObjAppendElemen
29f0: 74 28 65 73 2d 3e 69 6e 74 65 72 70 2c 20 54 63 t(es->interp, Tc
2a00: 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 65 l_GetObjResult(e
2a10: 73 2d 3e 69 6e 74 65 72 70 29 2c 20 6d 61 74 63 s->interp), matc
2a20: 68 50 74 72 29 3b 0d 0a 2b 20 20 20 20 20 7d 0d hPtr);..+ }.
2a30: 0a 2b 20 0d 0a 2b 20 20 20 20 20 2f 2a 20 74 65 .+ ..+ /* te
2a40: 6c 6c 20 74 68 65 20 73 65 72 76 65 72 20 77 65 ll the server we
2a50: 20 61 72 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 69 are no longer i
2a60: 6e 74 65 72 65 73 74 65 64 20 2a 2f 0d 0a 2b 20 nterested */..+
2a70: 20 20 20 20 50 6f 73 74 4d 65 73 73 61 67 65 28 PostMessage(
2a80: 68 77 6e 64 52 65 6d 6f 74 65 2c 20 57 4d 5f 44 hwndRemote, WM_D
2a90: 44 45 5f 54 45 52 4d 49 4e 41 54 45 2c 20 28 57 DE_TERMINATE, (W
2aa0: 50 41 52 41 4d 29 68 77 6e 64 2c 20 30 4c 29 3b PARAM)hwnd, 0L);
2ab0: 0d 0a 2b 20 20 20 20 20 72 65 74 75 72 6e 20 30 ..+ return 0
2ac0: 4c 3b 0d 0a 2b 20 7d 0d 0a 2b 20 0d 0a 2b 20 73 L;..+ }..+ ..+ s
2ad0: 74 61 74 69 63 20 42 4f 4f 4c 20 43 41 4c 4c 42 tatic BOOL CALLB
2ae0: 41 43 4b 0d 0a 2b 20 44 64 65 45 6e 75 6d 57 69 ACK..+ DdeEnumWi
2af0: 6e 64 6f 77 73 43 61 6c 6c 62 61 63 6b 28 48 57 ndowsCallback(HW
2b00: 4e 44 20 68 77 6e 64 54 61 72 67 65 74 2c 20 4c ND hwndTarget, L
2b10: 50 41 52 41 4d 20 6c 50 61 72 61 6d 29 0d 0a 2b PARAM lParam)..+
2b20: 20 7b 0d 0a 2b 20 20 20 20 20 44 57 4f 52 44 20 {..+ DWORD
2b30: 64 77 52 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 2b dwResult = 0;..+
2b40: 20 20 20 20 20 64 64 65 45 6e 75 6d 53 65 72 76 ddeEnumServ
2b50: 69 63 65 73 20 2a 65 73 20 3d 20 28 64 64 65 45 ices *es = (ddeE
2b60: 6e 75 6d 53 65 72 76 69 63 65 73 20 2a 29 6c 50 numServices *)lP
2b70: 61 72 61 6d 3b 0d 0a 2b 20 20 20 20 20 53 65 6e aram;..+ Sen
2b80: 64 4d 65 73 73 61 67 65 54 69 6d 65 6f 75 74 28 dMessageTimeout(
2b90: 68 77 6e 64 54 61 72 67 65 74 2c 20 57 4d 5f 44 hwndTarget, WM_D
2ba0: 44 45 5f 49 4e 49 54 49 41 54 45 2c 0d 0a 2b 20 DE_INITIATE,..+
2bb0: 09 09 20 20 20 20 20 20 20 28 57 50 41 52 41 4d .. (WPARAM
2bc0: 29 65 73 2d 3e 68 77 6e 64 2c 0d 0a 2b 20 09 09 )es->hwnd,..+ ..
2bd0: 20 20 20 20 20 20 20 4d 41 4b 45 4c 4f 4e 47 28 MAKELONG(
2be0: 65 73 2d 3e 73 65 72 76 69 63 65 2c 20 65 73 2d es->service, es-
2bf0: 3e 74 6f 70 69 63 29 2c 0d 0a 2b 20 09 09 20 20 >topic),..+ ..
2c00: 20 20 20 20 20 53 4d 54 4f 5f 41 42 4f 52 54 49 SMTO_ABORTI
2c10: 46 48 55 4e 47 2c 20 31 30 30 30 2c 20 26 64 77 FHUNG, 1000, &dw
2c20: 52 65 73 75 6c 74 29 3b 0d 0a 2b 20 20 20 20 20 Result);..+
2c30: 72 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 2b 20 return TRUE;..+
2c40: 7d 0d 0a 2b 20 0d 0a 2b 20 73 74 61 74 69 63 20 }..+ ..+ static
2c50: 69 6e 74 0d 0a 2b 20 44 64 65 47 65 74 53 65 72 int..+ DdeGetSer
2c60: 76 69 63 65 73 4c 69 73 74 28 54 63 6c 5f 49 6e vicesList(Tcl_In
2c70: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 68 terp *interp, ch
2c80: 61 72 20 2a 73 65 72 76 69 63 65 4e 61 6d 65 2c ar *serviceName,
2c90: 20 63 68 61 72 20 2a 74 6f 70 69 63 4e 61 6d 65 char *topicName
2ca0: 29 0d 0a 2b 20 7b 0d 0a 2b 20 20 20 20 20 64 64 )..+ {..+ dd
2cb0: 65 45 6e 75 6d 53 65 72 76 69 63 65 73 20 65 73 eEnumServices es
2cc0: 3b 0d 0a 2b 20 20 20 20 20 69 6e 74 20 72 20 3d ;..+ int r =
2cd0: 20 54 43 4c 5f 4f 4b 3b 0d 0a 2b 20 20 20 20 20 TCL_OK;..+
2ce0: 65 73 2e 69 6e 74 65 72 70 20 3d 20 69 6e 74 65 es.interp = inte
2cf0: 72 70 3b 0d 0a 2b 20 20 20 20 20 65 73 2e 72 65 rp;..+ es.re
2d00: 73 75 6c 74 20 3d 20 54 43 4c 5f 4f 4b 3b 0d 0a sult = TCL_OK;..
2d10: 2b 20 20 20 20 20 65 73 2e 73 65 72 76 69 63 65 + es.service
2d20: 20 3d 20 28 73 65 72 76 69 63 65 4e 61 6d 65 20 = (serviceName
2d30: 3d 3d 20 4e 55 4c 4c 29 20 0d 0a 2b 20 09 3f 20 == NULL) ..+ .?
2d40: 28 41 54 4f 4d 29 4e 55 4c 4c 20 3a 20 47 6c 6f (ATOM)NULL : Glo
2d50: 62 61 6c 41 64 64 41 74 6f 6d 28 73 65 72 76 69 balAddAtom(servi
2d60: 63 65 4e 61 6d 65 29 3b 0d 0a 2b 20 20 20 20 20 ceName);..+
2d70: 65 73 2e 74 6f 70 69 63 20 3d 20 28 74 6f 70 69 es.topic = (topi
2d80: 63 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 0d cName == NULL) .
2d90: 0a 2b 20 09 3f 20 28 41 54 4f 4d 29 4e 55 4c 4c .+ .? (ATOM)NULL
2da0: 20 3a 20 47 6c 6f 62 61 6c 41 64 64 41 74 6f 6d : GlobalAddAtom
2db0: 28 74 6f 70 69 63 4e 61 6d 65 29 3b 0d 0a 2b 20 (topicName);..+
2dc0: 20 20 20 20 0d 0a 2b 20 20 20 20 20 54 63 6c 5f ..+ Tcl_
2dd0: 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 ResetResult(inte
2de0: 72 70 29 3b 20 2f 2a 20 6f 75 72 20 6c 69 73 74 rp); /* our list
2df0: 20 69 73 20 74 6f 20 62 65 20 61 70 70 65 6e 64 is to be append
2e00: 65 64 20 74 6f 20 72 65 73 75 6c 74 2e 20 2a 2f ed to result. */
2e10: 0d 0a 2b 20 20 20 20 20 44 64 65 43 72 65 61 74 ..+ DdeCreat
2e20: 65 43 6c 69 65 6e 74 28 26 65 73 29 3b 0d 0a 2b eClient(&es);..+
2e30: 20 20 20 20 20 45 6e 75 6d 57 69 6e 64 6f 77 73 EnumWindows
2e40: 28 44 64 65 45 6e 75 6d 57 69 6e 64 6f 77 73 43 (DdeEnumWindowsC
2e50: 61 6c 6c 62 61 63 6b 2c 20 28 4c 50 41 52 41 4d allback, (LPARAM
2e60: 29 26 65 73 29 3b 0d 0a 2b 20 20 20 20 20 0d 0a )&es);..+ ..
2e70: 2b 20 20 20 20 20 69 66 20 28 49 73 57 69 6e 64 + if (IsWind
2e80: 6f 77 28 65 73 2e 68 77 6e 64 29 29 0d 0a 2b 20 ow(es.hwnd))..+
2e90: 20 20 20 20 20 20 20 20 44 65 73 74 72 6f 79 57 DestroyW
2ea0: 69 6e 64 6f 77 28 65 73 2e 68 77 6e 64 29 3b 0d indow(es.hwnd);.
2eb0: 0a 2b 20 20 20 20 20 69 66 20 28 65 73 2e 73 65 .+ if (es.se
2ec0: 72 76 69 63 65 20 21 3d 20 28 41 54 4f 4d 29 4e rvice != (ATOM)N
2ed0: 55 4c 4c 29 0d 0a 2b 20 09 47 6c 6f 62 61 6c 44 ULL)..+ .GlobalD
2ee0: 65 6c 65 74 65 41 74 6f 6d 28 65 73 2e 73 65 72 eleteAtom(es.ser
2ef0: 76 69 63 65 29 3b 0d 0a 2b 20 20 20 20 20 69 66 vice);..+ if
2f00: 20 28 65 73 2e 74 6f 70 69 63 20 21 3d 20 28 41 (es.topic != (A
2f10: 54 4f 4d 29 4e 55 4c 4c 29 0d 0a 2b 20 09 47 6c TOM)NULL)..+ .Gl
2f20: 6f 62 61 6c 44 65 6c 65 74 65 41 74 6f 6d 28 65 obalDeleteAtom(e
2f30: 73 2e 74 6f 70 69 63 29 3b 0d 0a 2b 20 20 20 20 s.topic);..+
2f40: 20 72 65 74 75 72 6e 20 65 73 2e 72 65 73 75 6c return es.resul
2f50: 74 3b 0d 0a 2b 20 7d 0d 0a 2b 20 0d 0a 2b 20 23 t;..+ }..+ ..+ #
2f60: 65 6e 64 69 66 20 2f 2a 20 21 20 4f 52 49 47 49 endif /* ! ORIGI
2f70: 4e 41 4c 5f 53 45 52 56 49 43 45 53 5f 43 4f 44 NAL_SERVICES_COD
2f80: 45 20 2a 2f 0d 0a 2b 20 0c 0d 0a 2b 20 2f 2a 0d E */..+ ...+ /*.
2f90: 0a 2b 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .+ *-----------
2fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2fd0: 2d 2d 2d 0d 0a 2b 20 20 2a 0d 0a 20 20 20 2a 20 ---..+ *.. *
2fe0: 53 65 74 44 64 65 45 72 72 6f 72 20 2d 2d 0d 0a SetDdeError --..
2ff0: 20 20 20 2a 0d 0a 20 20 20 2a 09 53 65 74 73 20 *.. *.Sets
3000: 74 68 65 20 69 6e 74 65 72 70 20 72 65 73 75 6c the interp resul
3010: 74 20 74 6f 20 61 20 63 6f 67 65 6e 74 20 65 72 t to a cogent er
3020: 72 6f 72 20 6d 65 73 73 61 67 65 0d 0a 2a 2a 2a ror message..***
3030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a ************..**
3040: 2a 20 38 33 33 2c 38 34 35 20 2a 2a 2a 2a 0d 0a * 833,845 ****..
3050: 20 20 09 44 44 45 5f 45 56 41 4c 0d 0a 20 20 20 .DDE_EVAL..
3060: 20 20 20 7d 3b 0d 0a 20 20 0d 0a 20 20 20 20 20 };.. ..
3070: 20 73 74 61 74 69 63 20 43 4f 4e 53 54 20 63 68 static CONST ch
3080: 61 72 20 2a 64 64 65 43 6f 6d 6d 61 6e 64 73 5b ar *ddeCommands[
3090: 5d 20 3d 20 7b 22 73 65 72 76 65 72 6e 61 6d 65 ] = {"servername
30a0: 22 2c 20 22 65 78 65 63 75 74 65 22 2c 20 22 70 ", "execute", "p
30b0: 6f 6b 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 oke",..
30c0: 20 20 20 22 72 65 71 75 65 73 74 22 2c 20 22 73 "request", "s
30d0: 65 72 76 69 63 65 73 22 2c 20 22 65 76 61 6c 22 ervices", "eval"
30e0: 2c 20 0d 0a 20 20 09 20 20 28 63 68 61 72 20 2a , .. . (char *
30f0: 29 20 4e 55 4c 4c 7d 3b 0d 0a 20 20 20 20 20 20 ) NULL};..
3100: 73 74 61 74 69 63 20 43 4f 4e 53 54 20 63 68 61 static CONST cha
3110: 72 20 2a 64 64 65 4f 70 74 69 6f 6e 73 5b 5d 20 r *ddeOptions[]
3120: 3d 20 7b 22 2d 61 73 79 6e 63 22 2c 20 28 63 68 = {"-async", (ch
3130: 61 72 20 2a 29 20 4e 55 4c 4c 7d 3b 0d 0a 20 20 ar *) NULL};..
3140: 20 20 20 20 73 74 61 74 69 63 20 43 4f 4e 53 54 static CONST
3150: 20 63 68 61 72 20 2a 64 64 65 52 65 71 4f 70 74 char *ddeReqOpt
3160: 69 6f 6e 73 5b 5d 20 3d 20 7b 22 2d 62 69 6e 61 ions[] = {"-bina
3170: 72 79 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 ry", (char *) NU
3180: 4c 4c 7d 3b 0d 0a 21 20 20 20 20 20 69 6e 74 20 LL};..! int
3190: 69 6e 64 65 78 2c 20 61 72 67 49 6e 64 65 78 3b index, argIndex;
31a0: 0d 0a 21 20 20 20 20 20 69 6e 74 20 61 73 79 6e ..! int asyn
31b0: 63 20 3d 20 30 2c 20 62 69 6e 61 72 79 20 3d 20 c = 0, binary =
31c0: 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 65 0;.. int re
31d0: 73 75 6c 74 20 3d 20 54 43 4c 5f 4f 4b 3b 0d 0a sult = TCL_OK;..
31e0: 20 20 20 20 20 20 48 53 5a 20 64 64 65 53 65 72 HSZ ddeSer
31f0: 76 69 63 65 20 3d 20 4e 55 4c 4c 3b 0d 0a 20 20 vice = NULL;..
3200: 20 20 20 20 48 53 5a 20 64 64 65 54 6f 70 69 63 HSZ ddeTopic
3210: 20 3d 20 4e 55 4c 4c 3b 0d 0a 2d 2d 2d 20 31 30 = NULL;..--- 10
3220: 39 31 2c 31 31 30 39 20 2d 2d 2d 2d 0d 0a 20 20 91,1109 ----..
3230: 09 44 44 45 5f 45 56 41 4c 0d 0a 20 20 20 20 20 .DDE_EVAL..
3240: 20 7d 3b 0d 0a 20 20 0d 0a 2b 20 20 20 20 20 65 };.. ..+ e
3250: 6e 75 6d 20 7b 0d 0a 2b 20 09 44 44 45 5f 53 45 num {..+ .DDE_SE
3260: 52 56 45 52 4e 41 4d 45 5f 45 58 41 43 54 2c 0d RVERNAME_EXACT,.
3270: 0a 2b 20 09 44 44 45 5f 53 45 52 56 45 52 4e 41 .+ .DDE_SERVERNA
3280: 4d 45 5f 4c 41 53 54 2c 0d 0a 2b 20 20 20 20 20 ME_LAST,..+
3290: 7d 3b 0d 0a 2b 20 0d 0a 20 20 20 20 20 20 73 74 };..+ .. st
32a0: 61 74 69 63 20 43 4f 4e 53 54 20 63 68 61 72 20 atic CONST char
32b0: 2a 64 64 65 43 6f 6d 6d 61 6e 64 73 5b 5d 20 3d *ddeCommands[] =
32c0: 20 7b 22 73 65 72 76 65 72 6e 61 6d 65 22 2c 20 {"servername",
32d0: 22 65 78 65 63 75 74 65 22 2c 20 22 70 6f 6b 65 "execute", "poke
32e0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
32f0: 22 72 65 71 75 65 73 74 22 2c 20 22 73 65 72 76 "request", "serv
3300: 69 63 65 73 22 2c 20 22 65 76 61 6c 22 2c 20 0d ices", "eval", .
3310: 0a 20 20 09 20 20 28 63 68 61 72 20 2a 29 20 4e . . (char *) N
3320: 55 4c 4c 7d 3b 0d 0a 20 20 20 20 20 20 73 74 61 ULL};.. sta
3330: 74 69 63 20 43 4f 4e 53 54 20 63 68 61 72 20 2a tic CONST char *
3340: 64 64 65 4f 70 74 69 6f 6e 73 5b 5d 20 3d 20 7b ddeOptions[] = {
3350: 22 2d 61 73 79 6e 63 22 2c 20 28 63 68 61 72 20 "-async", (char
3360: 2a 29 20 4e 55 4c 4c 7d 3b 0d 0a 20 20 20 20 20 *) NULL};..
3370: 20 73 74 61 74 69 63 20 43 4f 4e 53 54 20 63 68 static CONST ch
3380: 61 72 20 2a 64 64 65 52 65 71 4f 70 74 69 6f 6e ar *ddeReqOption
3390: 73 5b 5d 20 3d 20 7b 22 2d 62 69 6e 61 72 79 22 s[] = {"-binary"
33a0: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 7d , (char *) NULL}
33b0: 3b 0d 0a 21 20 20 20 20 20 73 74 61 74 69 63 20 ;..! static
33c0: 43 4f 4e 53 54 20 63 68 61 72 20 2a 64 64 65 53 CONST char *ddeS
33d0: 72 76 4f 70 74 69 6f 6e 73 5b 5d 20 3d 20 7b 22 rvOptions[] = {"
33e0: 2d 65 78 61 63 74 22 2c 20 22 2d 2d 22 2c 20 28 -exact", "--", (
33f0: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 7d 3b 0d 0a char *) NULL};..
3400: 21 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 2c ! int index,
3410: 20 61 72 67 49 6e 64 65 78 2c 20 69 3b 0d 0a 21 argIndex, i;..!
3420: 20 20 20 20 20 69 6e 74 20 61 73 79 6e 63 20 3d int async =
3430: 20 30 2c 20 62 69 6e 61 72 79 20 3d 20 30 2c 20 0, binary = 0,
3440: 65 78 61 63 74 20 3d 20 30 3b 0d 0a 20 20 20 20 exact = 0;..
3450: 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 54 int result = T
3460: 43 4c 5f 4f 4b 3b 0d 0a 20 20 20 20 20 20 48 53 CL_OK;.. HS
3470: 5a 20 64 64 65 53 65 72 76 69 63 65 20 3d 20 4e Z ddeService = N
3480: 55 4c 4c 3b 0d 0a 20 20 20 20 20 20 48 53 5a 20 ULL;.. HSZ
3490: 64 64 65 54 6f 70 69 63 20 3d 20 4e 55 4c 4c 3b ddeTopic = NULL;
34a0: 0d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ..**************
34b0: 2a 0d 0a 2a 2a 2a 20 38 37 35 2c 38 38 35 20 2a *..*** 875,885 *
34c0: 2a 2a 2a 0d 0a 20 20 0d 0a 20 20 20 20 20 20 73 ***.. .. s
34d0: 77 69 74 63 68 20 28 69 6e 64 65 78 29 20 7b 0d witch (index) {.
34e0: 0a 20 20 09 63 61 73 65 20 44 44 45 5f 53 45 52 . .case DDE_SER
34f0: 56 45 52 4e 41 4d 45 3a 0d 0a 21 20 09 20 20 20 VERNAME:..! .
3500: 20 69 66 20 28 28 6f 62 6a 63 20 21 3d 20 33 29 if ((objc != 3)
3510: 20 26 26 20 28 6f 62 6a 63 20 21 3d 20 32 29 29 && (objc != 2))
3520: 20 7b 0d 0a 21 20 09 09 54 63 6c 5f 57 72 6f 6e {..! ..Tcl_Wron
3530: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c gNumArgs(interp,
3540: 20 31 2c 20 6f 62 6a 76 2c 20 22 73 65 72 76 65 1, objv, "serve
3550: 72 6e 61 6d 65 20 3f 73 65 72 76 65 72 4e 61 6d rname ?serverNam
3560: 65 3f 22 29 3b 0d 0a 20 20 09 09 72 65 74 75 72 e?");.. ..retur
3570: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0d 0a 20 20 n TCL_ERROR;..
3580: 09 20 20 20 20 7d 0d 0a 21 20 09 20 20 20 20 66 . }..! . f
3590: 69 72 73 74 41 72 67 20 3d 20 28 6f 62 6a 63 20 irstArg = (objc
35a0: 2d 20 31 29 3b 0d 0a 20 20 09 20 20 20 20 62 72 - 1);.. . br
35b0: 65 61 6b 3b 0d 0a 20 20 09 63 61 73 65 20 44 44 eak;.. .case DD
35c0: 45 5f 45 58 45 43 55 54 45 3a 0d 0a 20 20 09 20 E_EXECUTE:.. .
35d0: 20 20 20 69 66 20 28 28 6f 62 6a 63 20 3c 20 35 if ((objc < 5
35e0: 29 20 7c 7c 20 28 6f 62 6a 63 20 3e 20 36 29 29 ) || (objc > 6))
35f0: 20 7b 0d 0a 2d 2d 2d 20 31 31 33 39 2c 31 31 37 {..--- 1139,117
3600: 32 20 2d 2d 2d 2d 0d 0a 20 20 0d 0a 20 20 20 20 2 ----.. ..
3610: 20 20 73 77 69 74 63 68 20 28 69 6e 64 65 78 29 switch (index)
3620: 20 7b 0d 0a 20 20 09 63 61 73 65 20 44 44 45 5f {.. .case DDE_
3630: 53 45 52 56 45 52 4e 41 4d 45 3a 0d 0a 21 20 09 SERVERNAME:..! .
3640: 20 20 20 20 66 6f 72 20 28 69 20 3d 20 32 3b 20 for (i = 2;
3650: 69 20 3c 20 6f 62 6a 63 3b 20 69 2b 2b 29 20 7b i < objc; i++) {
3660: 0d 0a 21 20 09 09 69 66 20 28 54 63 6c 5f 47 65 ..! ..if (Tcl_Ge
3670: 74 49 6e 64 65 78 46 72 6f 6d 4f 62 6a 28 69 6e tIndexFromObj(in
3680: 74 65 72 70 2c 20 6f 62 6a 76 5b 69 5d 2c 20 64 terp, objv[i], d
3690: 64 65 53 72 76 4f 70 74 69 6f 6e 73 2c 0d 0a 21 deSrvOptions,..!
36a0: 20 09 09 09 22 6f 70 74 69 6f 6e 22 2c 20 30 2c ..."option", 0,
36b0: 20 26 61 72 67 49 6e 64 65 78 29 20 21 3d 20 54 &argIndex) != T
36c0: 43 4c 5f 4f 4b 29 20 7b 0d 0a 21 20 09 09 20 20 CL_OK) {..! ..
36d0: 20 20 62 72 65 61 6b 3b 0d 0a 21 20 09 09 7d 20 break;..! ..}
36e0: 65 6c 73 65 20 69 66 20 28 61 72 67 49 6e 64 65 else if (argInde
36f0: 78 20 3d 3d 20 44 44 45 5f 53 45 52 56 45 52 4e x == DDE_SERVERN
3700: 41 4d 45 5f 45 58 41 43 54 29 20 7b 0d 0a 21 20 AME_EXACT) {..!
3710: 09 09 20 20 20 20 65 78 61 63 74 20 3d 20 31 3b .. exact = 1;
3720: 0d 0a 21 20 09 09 7d 20 65 6c 73 65 20 69 66 20 ..! ..} else if
3730: 28 61 72 67 49 6e 64 65 78 20 3d 3d 20 44 44 45 (argIndex == DDE
3740: 5f 53 45 52 56 45 52 4e 41 4d 45 5f 4c 41 53 54 _SERVERNAME_LAST
3750: 29 20 7b 0d 0a 21 20 09 09 20 20 20 20 69 2b 2b ) {..! .. i++
3760: 3b 0d 0a 21 20 09 09 20 20 20 20 62 72 65 61 6b ;..! .. break
3770: 3b 0d 0a 21 20 09 09 7d 20 65 6c 73 65 20 7b 0d ;..! ..} else {.
3780: 0a 21 20 09 09 20 20 20 20 54 63 6c 5f 52 65 73 .! .. Tcl_Res
3790: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 etResult(interp)
37a0: 3b 0d 0a 21 20 09 09 20 20 20 20 54 63 6c 5f 41 ;..! .. Tcl_A
37b0: 70 70 65 6e 64 53 74 72 69 6e 67 73 54 6f 4f 62 ppendStringsToOb
37c0: 6a 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 j(Tcl_GetObjResu
37d0: 6c 74 28 69 6e 74 65 72 70 29 2c 0d 0a 21 20 09 lt(interp),..! .
37e0: 09 09 20 20 20 20 22 62 61 64 20 6f 70 74 69 6f .. "bad optio
37f0: 6e 20 5c 22 22 2c 20 54 63 6c 5f 47 65 74 53 74 n \"", Tcl_GetSt
3800: 72 69 6e 67 28 6f 62 6a 76 5b 69 5d 29 2c 0d 0a ring(objv[i]),..
3810: 21 20 09 09 09 20 20 20 20 22 5c 22 3a 20 6d 75 ! ... "\": mu
3820: 73 74 20 62 65 20 2d 65 78 61 63 74 2c 20 6f 72 st be -exact, or
3830: 20 2d 2d 22 2c 0d 0a 21 20 09 09 09 20 20 20 20 --",..! ...
3840: 28 63 68 61 72 2a 29 4e 55 4c 4c 29 3b 0d 0a 21 (char*)NULL);..!
3850: 20 09 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 .. return TC
3860: 4c 5f 45 52 52 4f 52 3b 0d 0a 21 20 09 09 7d 0d L_ERROR;..! ..}.
3870: 0a 21 20 09 20 20 20 20 7d 0d 0a 21 20 0d 0a 21 .! . }..! ..!
3880: 20 09 20 20 20 20 69 66 20 28 28 6f 62 6a 63 20 . if ((objc
3890: 2d 20 69 29 20 3e 20 31 29 20 7b 0d 0a 21 20 09 - i) > 1) {..! .
38a0: 09 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 .Tcl_ResetResult
38b0: 28 69 6e 74 65 72 70 29 3b 0d 0a 21 20 09 09 54 (interp);..! ..T
38c0: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 cl_WrongNumArgs(
38d0: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c interp, 1, objv,
38e0: 0d 0a 21 20 09 09 09 22 73 65 72 76 65 72 6e 61 ..! ..."serverna
38f0: 6d 65 20 3f 2d 65 78 61 63 74 20 3f 20 3f 2d 2d me ?-exact ? ?--
3900: 3f 22 0d 0a 21 20 09 09 09 22 20 3f 73 65 72 76 ?"..! ..." ?serv
3910: 65 72 4e 61 6d 65 3f 22 29 3b 0d 0a 20 20 09 09 erName?");.. ..
3920: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
3930: 3b 0d 0a 20 20 09 20 20 20 20 7d 0d 0a 21 20 09 ;.. . }..! .
3940: 20 20 20 20 0d 0a 21 20 09 20 20 20 20 66 69 72 ..! . fir
3950: 73 74 41 72 67 20 3d 20 28 6f 62 6a 63 20 3d 3d stArg = (objc ==
3960: 20 69 29 20 3f 20 31 20 3a 20 69 3b 0d 0a 20 20 i) ? 1 : i;..
3970: 09 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 09 . break;.. .
3980: 63 61 73 65 20 44 44 45 5f 45 58 45 43 55 54 45 case DDE_EXECUTE
3990: 3a 0d 0a 20 20 09 20 20 20 20 69 66 20 28 28 6f :.. . if ((o
39a0: 62 6a 63 20 3c 20 35 29 20 7c 7c 20 28 6f 62 6a bjc < 5) || (obj
39b0: 63 20 3e 20 36 29 29 20 7b 0d 0a 2a 2a 2a 2a 2a c > 6)) {..*****
39c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 **********..***
39d0: 31 30 30 31 2c 31 30 30 37 20 2a 2a 2a 2a 0d 0a 1001,1007 ****..
39e0: 20 20 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 .. switch
39f0: 20 28 69 6e 64 65 78 29 20 7b 0d 0a 20 20 09 63 (index) {.. .c
3a00: 61 73 65 20 44 44 45 5f 53 45 52 56 45 52 4e 41 ase DDE_SERVERNA
3a10: 4d 45 3a 20 7b 0d 0a 21 20 09 20 20 20 20 73 65 ME: {..! . se
3a20: 72 76 69 63 65 4e 61 6d 65 20 3d 20 44 64 65 53 rviceName = DdeS
3a30: 65 74 53 65 72 76 65 72 4e 61 6d 65 28 69 6e 74 etServerName(int
3a40: 65 72 70 2c 20 73 65 72 76 69 63 65 4e 61 6d 65 erp, serviceName
3a50: 29 3b 0d 0a 20 20 09 20 20 20 20 69 66 20 28 73 );.. . if (s
3a60: 65 72 76 69 63 65 4e 61 6d 65 20 21 3d 20 4e 55 erviceName != NU
3a70: 4c 4c 29 20 7b 0d 0a 20 20 09 09 54 63 6c 5f 53 LL) {.. ..Tcl_S
3a80: 65 74 53 74 72 69 6e 67 4f 62 6a 28 54 63 6c 5f etStringObj(Tcl_
3a90: 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 GetObjResult(int
3aa0: 65 72 70 29 2c 0d 0a 20 20 09 09 09 73 65 72 76 erp),.. ...serv
3ab0: 69 63 65 4e 61 6d 65 2c 20 2d 31 29 3b 0d 0a 2d iceName, -1);..-
3ac0: 2d 2d 20 31 32 38 38 2c 31 32 39 34 20 2d 2d 2d -- 1288,1294 ---
3ad0: 2d 0d 0a 20 20 0d 0a 20 20 20 20 20 20 73 77 69 -.. .. swi
3ae0: 74 63 68 20 28 69 6e 64 65 78 29 20 7b 0d 0a 20 tch (index) {..
3af0: 20 09 63 61 73 65 20 44 44 45 5f 53 45 52 56 45 .case DDE_SERVE
3b00: 52 4e 41 4d 45 3a 20 7b 0d 0a 21 20 09 20 20 20 RNAME: {..! .
3b10: 20 73 65 72 76 69 63 65 4e 61 6d 65 20 3d 20 44 serviceName = D
3b20: 64 65 53 65 74 53 65 72 76 65 72 4e 61 6d 65 28 deSetServerName(
3b30: 69 6e 74 65 72 70 2c 20 73 65 72 76 69 63 65 4e interp, serviceN
3b40: 61 6d 65 2c 20 65 78 61 63 74 29 3b 0d 0a 20 20 ame, exact);..
3b50: 09 20 20 20 20 69 66 20 28 73 65 72 76 69 63 65 . if (service
3b60: 4e 61 6d 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0d Name != NULL) {.
3b70: 0a 20 20 09 09 54 63 6c 5f 53 65 74 53 74 72 69 . ..Tcl_SetStri
3b80: 6e 67 4f 62 6a 28 54 63 6c 5f 47 65 74 4f 62 6a ngObj(Tcl_GetObj
3b90: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 0d Result(interp),.
3ba0: 0a 20 20 09 09 09 73 65 72 76 69 63 65 4e 61 6d . ...serviceNam
3bb0: 65 2c 20 2d 31 29 3b 0d 0a 2a 2a 2a 2a 2a 2a 2a e, -1);..*******
3bc0: 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 2a 2a 2a 20 31 31 ********..*** 11
3bd0: 33 32 2c 31 31 37 37 20 2a 2a 2a 2a 0d 0a 20 20 32,1177 ****..
3be0: 09 7d 0d 0a 20 20 0d 0a 20 20 09 63 61 73 65 20 .}.. .. .case
3bf0: 44 44 45 5f 53 45 52 56 49 43 45 53 3a 20 7b 0d DDE_SERVICES: {.
3c00: 0a 21 20 09 20 20 20 20 48 43 4f 4e 56 4c 49 53 .! . HCONVLIS
3c10: 54 20 68 43 6f 6e 76 4c 69 73 74 3b 0d 0a 21 20 T hConvList;..!
3c20: 09 20 20 20 20 43 4f 4e 56 49 4e 46 4f 20 63 6f . CONVINFO co
3c30: 6e 76 49 6e 66 6f 3b 0d 0a 21 20 09 20 20 20 20 nvInfo;..! .
3c40: 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 76 4c 69 73 Tcl_Obj *convLis
3c50: 74 4f 62 6a 50 74 72 2c 20 2a 65 6c 65 6d 65 6e tObjPtr, *elemen
3c60: 74 4f 62 6a 50 74 72 3b 0d 0a 21 20 09 20 20 20 tObjPtr;..! .
3c70: 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 64 53 74 Tcl_DString dSt
3c80: 72 69 6e 67 3b 0d 0a 21 20 09 20 20 20 20 63 68 ring;..! . ch
3c90: 61 72 20 2a 6e 61 6d 65 3b 0d 0a 21 20 09 20 20 ar *name;..! .
3ca0: 20 20 0d 0a 21 20 09 20 20 20 20 63 6f 6e 76 49 ..! . convI
3cb0: 6e 66 6f 2e 63 62 20 3d 20 73 69 7a 65 6f 66 28 nfo.cb = sizeof(
3cc0: 43 4f 4e 56 49 4e 46 4f 29 3b 0d 0a 21 20 09 20 CONVINFO);..! .
3cd0: 20 20 20 68 43 6f 6e 76 4c 69 73 74 20 3d 20 44 hConvList = D
3ce0: 64 65 43 6f 6e 6e 65 63 74 4c 69 73 74 28 64 64 deConnectList(dd
3cf0: 65 49 6e 73 74 61 6e 63 65 2c 20 64 64 65 53 65 eInstance, ddeSe
3d00: 72 76 69 63 65 2c 20 0d 0a 21 20 20 20 20 20 20 rvice, ..!
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
3d20: 64 65 54 6f 70 69 63 2c 20 30 2c 20 4e 55 4c 4c deTopic, 0, NULL
3d30: 29 3b 0d 0a 21 20 09 20 20 20 20 44 64 65 46 72 );..! . DdeFr
3d40: 65 65 53 74 72 69 6e 67 48 61 6e 64 6c 65 28 64 eeStringHandle(d
3d50: 64 65 49 6e 73 74 61 6e 63 65 2c 64 64 65 53 65 deInstance,ddeSe
3d60: 72 76 69 63 65 29 3b 0d 0a 21 20 09 20 20 20 20 rvice);..! .
3d70: 44 64 65 46 72 65 65 53 74 72 69 6e 67 48 61 6e DdeFreeStringHan
3d80: 64 6c 65 28 64 64 65 49 6e 73 74 61 6e 63 65 2c dle(ddeInstance,
3d90: 20 64 64 65 54 6f 70 69 63 29 3b 0d 0a 21 20 09 ddeTopic);..! .
3da0: 20 20 20 20 68 43 6f 6e 76 20 3d 20 30 3b 0d 0a hConv = 0;..
3db0: 21 20 09 20 20 20 20 63 6f 6e 76 4c 69 73 74 4f ! . convListO
3dc0: 62 6a 50 74 72 20 3d 20 54 63 6c 5f 4e 65 77 4c bjPtr = Tcl_NewL
3dd0: 69 73 74 4f 62 6a 28 30 2c 20 28 54 63 6c 5f 4f istObj(0, (Tcl_O
3de0: 62 6a 20 2a 2a 29 20 4e 55 4c 4c 29 3b 0d 0a 21 bj **) NULL);..!
3df0: 20 09 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e . Tcl_DStrin
3e00: 67 49 6e 69 74 28 26 64 53 74 72 69 6e 67 29 3b gInit(&dString);
3e10: 0d 0a 21 20 0d 0a 21 20 09 20 20 20 20 77 68 69 ..! ..! . whi
3e20: 6c 65 20 28 68 43 6f 6e 76 20 3d 20 44 64 65 51 le (hConv = DdeQ
3e30: 75 65 72 79 4e 65 78 74 53 65 72 76 65 72 28 68 ueryNextServer(h
3e40: 43 6f 6e 76 4c 69 73 74 2c 20 68 43 6f 6e 76 29 ConvList, hConv)
3e50: 2c 20 68 43 6f 6e 76 20 21 3d 20 30 29 20 7b 0d , hConv != 0) {.
3e60: 0a 21 20 09 09 65 6c 65 6d 65 6e 74 4f 62 6a 50 .! ..elementObjP
3e70: 74 72 20 3d 20 54 63 6c 5f 4e 65 77 4c 69 73 74 tr = Tcl_NewList
3e80: 4f 62 6a 28 30 2c 20 28 54 63 6c 5f 4f 62 6a 20 Obj(0, (Tcl_Obj
3e90: 2a 2a 29 20 4e 55 4c 4c 29 3b 0d 0a 21 20 09 09 **) NULL);..! ..
3ea0: 44 64 65 51 75 65 72 79 43 6f 6e 76 49 6e 66 6f DdeQueryConvInfo
3eb0: 28 68 43 6f 6e 76 2c 20 51 49 44 5f 53 59 4e 43 (hConv, QID_SYNC
3ec0: 2c 20 26 63 6f 6e 76 49 6e 66 6f 29 3b 0d 0a 21 , &convInfo);..!
3ed0: 20 09 09 6c 65 6e 67 74 68 20 3d 20 44 64 65 51 ..length = DdeQ
3ee0: 75 65 72 79 53 74 72 69 6e 67 28 64 64 65 49 6e ueryString(ddeIn
3ef0: 73 74 61 6e 63 65 2c 20 0d 0a 21 20 20 20 20 20 stance, ..!
3f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f10: 20 20 20 20 63 6f 6e 76 49 6e 66 6f 2e 68 73 7a convInfo.hsz
3f20: 53 76 63 50 61 72 74 6e 65 72 2c 20 4e 55 4c 4c SvcPartner, NULL
3f30: 2c 20 30 2c 20 43 50 5f 57 49 4e 41 4e 53 49 29 , 0, CP_WINANSI)
3f40: 3b 0d 0a 21 20 09 09 54 63 6c 5f 44 53 74 72 69 ;..! ..Tcl_DStri
3f50: 6e 67 53 65 74 4c 65 6e 67 74 68 28 26 64 53 74 ngSetLength(&dSt
3f60: 72 69 6e 67 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a ring, length);..
3f70: 21 20 09 09 6e 61 6d 65 20 3d 20 54 63 6c 5f 44 ! ..name = Tcl_D
3f80: 53 74 72 69 6e 67 56 61 6c 75 65 28 26 64 53 74 StringValue(&dSt
3f90: 72 69 6e 67 29 3b 0d 0a 21 20 09 09 44 64 65 51 ring);..! ..DdeQ
3fa0: 75 65 72 79 53 74 72 69 6e 67 28 64 64 65 49 6e ueryString(ddeIn
3fb0: 73 74 61 6e 63 65 2c 20 63 6f 6e 76 49 6e 66 6f stance, convInfo
3fc0: 2e 68 73 7a 53 76 63 50 61 72 74 6e 65 72 2c 20 .hszSvcPartner,
3fd0: 0d 0a 21 20 20 20 20 20 20 20 20 20 20 20 20 20 ..!
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 name
3ff0: 2c 20 28 44 57 4f 52 44 29 20 6c 65 6e 67 74 68 , (DWORD) length
4000: 20 2b 20 31 2c 20 43 50 5f 57 49 4e 41 4e 53 49 + 1, CP_WINANSI
4010: 29 3b 0d 0a 21 20 09 09 54 63 6c 5f 4c 69 73 74 );..! ..Tcl_List
4020: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 ObjAppendElement
4030: 28 69 6e 74 65 72 70 2c 20 65 6c 65 6d 65 6e 74 (interp, element
4040: 4f 62 6a 50 74 72 2c 0d 0a 21 20 09 09 09 54 63 ObjPtr,..! ...Tc
4050: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 6e l_NewStringObj(n
4060: 61 6d 65 2c 20 6c 65 6e 67 74 68 29 29 3b 0d 0a ame, length));..
4070: 21 20 09 09 6c 65 6e 67 74 68 20 3d 20 44 64 65 ! ..length = Dde
4080: 51 75 65 72 79 53 74 72 69 6e 67 28 64 64 65 49 QueryString(ddeI
4090: 6e 73 74 61 6e 63 65 2c 20 63 6f 6e 76 49 6e 66 nstance, convInf
40a0: 6f 2e 68 73 7a 54 6f 70 69 63 2c 0d 0a 21 20 09 o.hszTopic,..! .
40b0: 09 09 4e 55 4c 4c 2c 20 30 2c 20 43 50 5f 57 49 ..NULL, 0, CP_WI
40c0: 4e 41 4e 53 49 29 3b 0d 0a 21 20 09 09 54 63 6c NANSI);..! ..Tcl
40d0: 5f 44 53 74 72 69 6e 67 53 65 74 4c 65 6e 67 74 _DStringSetLengt
40e0: 68 28 26 64 53 74 72 69 6e 67 2c 20 6c 65 6e 67 h(&dString, leng
40f0: 74 68 29 3b 0d 0a 21 20 09 09 6e 61 6d 65 20 3d th);..! ..name =
4100: 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75 Tcl_DStringValu
4110: 65 28 26 64 53 74 72 69 6e 67 29 3b 0d 0a 21 20 e(&dString);..!
4120: 09 09 44 64 65 51 75 65 72 79 53 74 72 69 6e 67 ..DdeQueryString
4130: 28 64 64 65 49 6e 73 74 61 6e 63 65 2c 20 63 6f (ddeInstance, co
4140: 6e 76 49 6e 66 6f 2e 68 73 7a 54 6f 70 69 63 2c nvInfo.hszTopic,
4150: 20 6e 61 6d 65 2c 0d 0a 21 20 09 09 09 28 44 57 name,..! ...(DW
4160: 4f 52 44 29 20 6c 65 6e 67 74 68 20 2b 20 31 2c ORD) length + 1,
4170: 20 43 50 5f 57 49 4e 41 4e 53 49 29 3b 0d 0a 21 CP_WINANSI);..!
4180: 20 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 ..Tcl_ListObjAp
4190: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 pendElement(inte
41a0: 72 70 2c 20 65 6c 65 6d 65 6e 74 4f 62 6a 50 74 rp, elementObjPt
41b0: 72 2c 0d 0a 21 20 09 09 09 54 63 6c 5f 4e 65 77 r,..! ...Tcl_New
41c0: 53 74 72 69 6e 67 4f 62 6a 28 6e 61 6d 65 2c 20 StringObj(name,
41d0: 6c 65 6e 67 74 68 29 29 3b 0d 0a 21 20 09 09 54 length));..! ..T
41e0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 cl_ListObjAppend
41f0: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 Element(interp,
4200: 63 6f 6e 76 4c 69 73 74 4f 62 6a 50 74 72 2c 0d convListObjPtr,.
4210: 0a 21 20 09 09 09 65 6c 65 6d 65 6e 74 4f 62 6a .! ...elementObj
4220: 50 74 72 29 3b 0d 0a 21 20 09 20 20 20 20 7d 0d Ptr);..! . }.
4230: 0a 21 20 09 20 20 20 20 44 64 65 44 69 73 63 6f .! . DdeDisco
4240: 6e 6e 65 63 74 4c 69 73 74 28 68 43 6f 6e 76 4c nnectList(hConvL
4250: 69 73 74 29 3b 0d 0a 21 20 09 20 20 20 20 54 63 ist);..! . Tc
4260: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 l_SetObjResult(i
4270: 6e 74 65 72 70 2c 20 63 6f 6e 76 4c 69 73 74 4f nterp, convListO
4280: 62 6a 50 74 72 29 3b 0d 0a 21 20 09 20 20 20 20 bjPtr);..! .
4290: 54 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28 Tcl_DStringFree(
42a0: 26 64 53 74 72 69 6e 67 29 3b 0d 0a 20 20 09 20 &dString);.. .
42b0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 09 7d 0d break;.. .}.
42c0: 0a 20 20 09 63 61 73 65 20 44 44 45 5f 45 56 41 . .case DDE_EVA
42d0: 4c 3a 20 7b 0d 0a 2d 2d 2d 20 31 34 31 39 2c 31 L: {..--- 1419,1
42e0: 34 32 35 20 2d 2d 2d 2d 0d 0a 20 20 09 7d 0d 0a 425 ----.. .}..
42f0: 20 20 0d 0a 20 20 09 63 61 73 65 20 44 44 45 5f .. .case DDE_
4300: 53 45 52 56 49 43 45 53 3a 20 7b 0d 0a 21 20 09 SERVICES: {..! .
4310: 20 20 20 20 72 65 73 75 6c 74 20 3d 20 44 64 65 result = Dde
4320: 47 65 74 53 65 72 76 69 63 65 73 4c 69 73 74 28 GetServicesList(
4330: 69 6e 74 65 72 70 2c 20 73 65 72 76 69 63 65 4e interp, serviceN
4340: 61 6d 65 2c 20 74 6f 70 69 63 4e 61 6d 65 29 3b ame, topicName);
4350: 0d 0a 20 20 09 20 20 20 20 62 72 65 61 6b 3b 0d .. . break;.
4360: 0a 20 20 09 7d 0d 0a 20 20 09 63 61 73 65 20 44 . .}.. .case D
4370: 44 45 5f 45 56 41 4c 3a 20 7b 0d 0a DE_EVAL: {..