Tcl Source Code

Hex Artifact Content
Login

Artifact b246ac33150945dfc05873198f037ed50c570efa:

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: {..