Hex Artifact Content

Not logged in

Artifact 958265cdfd657f8f1461084f5beb6efa86b8a331:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0040: 2a 2a 2a 2a 2a 2a 2a 2a 5c 0a 2a 20 20 20 20 20  ********\.*     
0050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0060: 20 20 20 20 20 20 20 20 20 20 20 20 64 64 65 2e              dde.
0070: 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d               
0080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0090: 20 20 2a 0a 2a 20 20 20 20 20 20 20 20 20 20 20    *.*           
00a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 0a 2a 20              *.* 
00e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00f0: 20 20 20 20 20 20 57 69 6e 64 6f 77 73 20 41 50        Windows AP
0100: 49 20 68 65 61 64 65 72 20 6d 6f 64 75 6c 65 20  I header module 
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0120: 20 20 20 20 20 20 2a 0a 2a 20 20 20 20 20 20 20        *.*       
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0170: 2a 0a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  *.*             
0180: 20 20 20 20 54 72 61 6e 73 6c 61 74 65 64 20 66      Translated f
0190: 72 6f 6d 20 4d 69 6e 47 57 20 57 69 6e 64 6f 77  rom MinGW Window
01a0: 73 20 68 65 61 64 65 72 73 20 20 20 20 20 20 20  s headers       
01b0: 20 20 20 20 20 20 20 20 20 20 2a 0a 2a 20 20 20            *.*   
01c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01d0: 20 20 20 20 20 20 20 20 62 79 20 53 74 65 77 61          by Stewa
01e0: 72 74 20 47 6f 72 64 6f 6e 20 20 20 20 20 20 20  rt Gordon       
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0200: 20 20 20 20 2a 0a 2a 20 20 20 20 20 20 20 20 20      *.*         
0210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 0a                *.
0250: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
0260: 20 20 20 20 20 20 20 20 50 6c 61 63 65 64 20 69          Placed i
0270: 6e 74 6f 20 70 75 62 6c 69 63 20 64 6f 6d 61 69  nto public domai
0280: 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n               
0290: 20 20 20 20 20 20 20 20 2a 0a 5c 2a 2a 2a 2a 2a          *.\*****
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02e0: 2a 2a 2f 0a 6d 6f 64 75 6c 65 20 77 69 6e 33 32  **/.module win32
02f0: 2e 64 64 65 3b 0a 70 72 61 67 6d 61 28 6c 69 62  .dde;.pragma(lib
0300: 2c 20 22 75 73 65 72 33 32 2e 6c 69 62 22 29 3b  , "user32.lib");
0310: 0a 0a 70 72 69 76 61 74 65 20 69 6d 70 6f 72 74  ..private import
0320: 20 77 69 6e 33 32 2e 77 69 6e 64 65 66 3b 0a 0a   win32.windef;..
0330: 65 6e 75 6d 20 3a 20 75 69 6e 74 20 7b 0a 09 57  enum : uint {..W
0340: 4d 5f 44 44 45 5f 46 49 52 53 54 20 20 20 20 20  M_DDE_FIRST     
0350: 3d 20 30 78 30 33 45 30 2c 0a 09 57 4d 5f 44 44  = 0x03E0,..WM_DD
0360: 45 5f 49 4e 49 54 49 41 54 45 20 20 3d 20 57 4d  E_INITIATE  = WM
0370: 5f 44 44 45 5f 46 49 52 53 54 2c 0a 09 57 4d 5f  _DDE_FIRST,..WM_
0380: 44 44 45 5f 54 45 52 4d 49 4e 41 54 45 2c 0a 09  DDE_TERMINATE,..
0390: 57 4d 5f 44 44 45 5f 41 44 56 49 53 45 2c 0a 09  WM_DDE_ADVISE,..
03a0: 57 4d 5f 44 44 45 5f 55 4e 41 44 56 49 53 45 2c  WM_DDE_UNADVISE,
03b0: 0a 09 57 4d 5f 44 44 45 5f 41 43 4b 2c 0a 09 57  ..WM_DDE_ACK,..W
03c0: 4d 5f 44 44 45 5f 44 41 54 41 2c 0a 09 57 4d 5f  M_DDE_DATA,..WM_
03d0: 44 44 45 5f 52 45 51 55 45 53 54 2c 0a 09 57 4d  DDE_REQUEST,..WM
03e0: 5f 44 44 45 5f 50 4f 4b 45 2c 0a 09 57 4d 5f 44  _DDE_POKE,..WM_D
03f0: 44 45 5f 45 58 45 43 55 54 45 2c 0a 09 57 4d 5f  DE_EXECUTE,..WM_
0400: 44 44 45 5f 4c 41 53 54 20 20 20 20 20 20 3d 20  DDE_LAST      = 
0410: 57 4d 5f 44 44 45 5f 45 58 45 43 55 54 45 0a 7d  WM_DDE_EXECUTE.}
0420: 0a 0a 73 74 72 75 63 74 20 44 44 45 41 43 4b 20  ..struct DDEACK 
0430: 7b 0a 09 75 62 79 74 65 20 62 41 70 70 52 65 74  {..ubyte bAppRet
0440: 75 72 6e 43 6f 64 65 3b 0a 09 75 62 79 74 65 20  urnCode;..ubyte 
0450: 5f 62 66 3b 0a 0a 09 75 62 79 74 65 20 72 65 73  _bf;...ubyte res
0460: 65 72 76 65 64 28 29 20 7b 20 72 65 74 75 72 6e  erved() { return
0470: 20 63 61 73 74 28 75 62 79 74 65 29 20 28 5f 62   cast(ubyte) (_b
0480: 66 20 26 20 30 78 33 46 29 3b 20 7d 0a 09 62 6f  f & 0x3F); }..bo
0490: 6f 6c 20 20 66 42 75 73 79 28 29 20 20 20 20 7b  ol  fBusy()    {
04a0: 20 72 65 74 75 72 6e 20 63 61 73 74 28 62 6f 6f   return cast(boo
04b0: 6c 29 20 20 28 5f 62 66 20 26 20 30 78 34 30 29  l)  (_bf & 0x40)
04c0: 3b 20 7d 0a 09 62 6f 6f 6c 20 20 66 41 63 6b 28  ; }..bool  fAck(
04d0: 29 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63  )     { return c
04e0: 61 73 74 28 62 6f 6f 6c 29 20 20 28 5f 62 66 20  ast(bool)  (_bf 
04f0: 26 20 30 78 38 30 29 3b 20 7d 0a 0a 09 75 62 79  & 0x80); }...uby
0500: 74 65 20 72 65 73 65 72 76 65 64 28 75 62 79 74  te reserved(ubyt
0510: 65 20 72 29 20 7b 0a 09 09 5f 62 66 20 3d 20 63  e r) {..._bf = c
0520: 61 73 74 28 75 62 79 74 65 29 20 28 28 5f 62 66  ast(ubyte) ((_bf
0530: 20 26 20 7e 30 78 33 46 29 20 7c 20 28 72 20 26   & ~0x3F) | (r &
0540: 20 30 78 33 46 29 29 3b 0a 09 09 72 65 74 75 72   0x3F));...retur
0550: 6e 20 63 61 73 74 28 75 62 79 74 65 29 28 72 20  n cast(ubyte)(r 
0560: 26 20 30 78 33 46 29 3b 0a 09 7d 0a 0a 09 62 6f  & 0x3F);..}...bo
0570: 6f 6c 20 66 42 75 73 79 28 62 6f 6f 6c 20 66 29  ol fBusy(bool f)
0580: 20 7b 20 5f 62 66 20 3d 20 63 61 73 74 28 75 62   { _bf = cast(ub
0590: 79 74 65 29 20 28 28 5f 62 66 20 26 20 7e 30 78  yte) ((_bf & ~0x
05a0: 34 30 29 20 7c 20 28 66 20 3c 3c 20 36 29 29 3b  40) | (f << 6));
05b0: 20 72 65 74 75 72 6e 20 66 3b 20 7d 0a 09 62 6f   return f; }..bo
05c0: 6f 6c 20 66 41 63 6b 28 62 6f 6f 6c 20 66 29 20  ol fAck(bool f) 
05d0: 20 7b 20 5f 62 66 20 3d 20 63 61 73 74 28 75 62   { _bf = cast(ub
05e0: 79 74 65 29 20 28 28 5f 62 66 20 26 20 7e 30 78  yte) ((_bf & ~0x
05f0: 38 30 29 20 7c 20 28 66 20 3c 3c 20 37 29 29 3b  80) | (f << 7));
0600: 20 72 65 74 75 72 6e 20 66 3b 20 7d 0a 7d 0a 0a   return f; }.}..
0610: 73 74 72 75 63 74 20 44 44 45 41 44 56 49 53 45  struct DDEADVISE
0620: 20 7b 0a 09 75 73 68 6f 72 74 20 5f 62 66 3b 0a   {..ushort _bf;.
0630: 09 73 68 6f 72 74 20 20 63 66 46 6f 72 6d 61 74  .short  cfFormat
0640: 3b 0a 0a 09 75 73 68 6f 72 74 20 72 65 73 65 72  ;...ushort reser
0650: 76 65 64 28 29 20 20 7b 20 72 65 74 75 72 6e 20  ved()  { return 
0660: 63 61 73 74 28 75 73 68 6f 72 74 29 20 28 5f 62  cast(ushort) (_b
0670: 66 20 26 20 30 78 33 46 46 46 29 3b 20 7d 0a 09  f & 0x3FFF); }..
0680: 62 6f 6f 6c 20 20 20 66 44 65 66 65 72 55 70 64  bool   fDeferUpd
0690: 28 29 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74  () { return cast
06a0: 28 62 6f 6f 6c 29 20 20 20 28 5f 62 66 20 26 20  (bool)   (_bf & 
06b0: 30 78 34 30 30 30 29 3b 20 7d 0a 09 62 6f 6f 6c  0x4000); }..bool
06c0: 20 20 20 66 41 63 6b 52 65 71 28 29 20 20 20 7b     fAckReq()   {
06d0: 20 72 65 74 75 72 6e 20 63 61 73 74 28 62 6f 6f   return cast(boo
06e0: 6c 29 20 20 20 28 5f 62 66 20 26 20 30 78 38 30  l)   (_bf & 0x80
06f0: 30 30 29 3b 20 7d 0a 0a 09 75 73 68 6f 72 74 20  00); }...ushort 
0700: 72 65 73 65 72 76 65 64 28 75 73 68 6f 72 74 20  reserved(ushort 
0710: 72 29 20 7b 0a 09 09 5f 62 66 20 3d 20 63 61 73  r) {..._bf = cas
0720: 74 28 75 73 68 6f 72 74 29 20 28 28 5f 62 66 20  t(ushort) ((_bf 
0730: 26 20 7e 30 78 33 46 46 46 29 20 7c 20 28 72 20  & ~0x3FFF) | (r 
0740: 26 20 30 78 33 46 46 46 29 29 3b 0a 09 09 72 65  & 0x3FFF));...re
0750: 74 75 72 6e 20 63 61 73 74 28 75 73 68 6f 72 74  turn cast(ushort
0760: 29 28 72 20 26 20 30 78 33 46 46 46 29 3b 0a 09  )(r & 0x3FFF);..
0770: 7d 0a 0a 09 62 6f 6f 6c 20 20 20 66 44 65 66 65  }...bool   fDefe
0780: 72 55 70 64 28 62 6f 6f 6c 20 66 29 20 7b 20 5f  rUpd(bool f) { _
0790: 62 66 20 3d 20 63 61 73 74 28 75 73 68 6f 72 74  bf = cast(ushort
07a0: 29 20 28 28 5f 62 66 20 26 20 7e 30 78 34 30 30  ) ((_bf & ~0x400
07b0: 30 29 20 7c 20 28 66 20 3c 3c 20 31 34 29 29 3b  0) | (f << 14));
07c0: 20 72 65 74 75 72 6e 20 66 3b 20 7d 0a 09 62 6f   return f; }..bo
07d0: 6f 6c 20 20 20 66 41 63 6b 52 65 71 28 62 6f 6f  ol   fAckReq(boo
07e0: 6c 20 66 29 20 20 20 7b 20 5f 62 66 20 3d 20 63  l f)   { _bf = c
07f0: 61 73 74 28 75 73 68 6f 72 74 29 20 28 28 5f 62  ast(ushort) ((_b
0800: 66 20 26 20 7e 30 78 38 30 30 30 29 20 7c 20 28  f & ~0x8000) | (
0810: 66 20 3c 3c 20 31 35 29 29 3b 20 72 65 74 75 72  f << 15)); retur
0820: 6e 20 66 3b 20 7d 0a 7d 0a 0a 73 74 72 75 63 74  n f; }.}..struct
0830: 20 44 44 45 44 41 54 41 20 7b 0a 09 75 73 68 6f   DDEDATA {..usho
0840: 72 74 20 5f 62 66 3b 0a 09 73 68 6f 72 74 20 20  rt _bf;..short  
0850: 63 66 46 6f 72 6d 61 74 3b 0a 09 62 79 74 65 20  cfFormat;..byte 
0860: 20 20 5f 56 61 6c 75 65 3b 0a 0a 09 75 73 68 6f    _Value;...usho
0870: 72 74 20 75 6e 75 73 65 64 28 29 20 20 20 20 7b  rt unused()    {
0880: 20 72 65 74 75 72 6e 20 63 61 73 74 28 75 73 68   return cast(ush
0890: 6f 72 74 29 20 28 5f 62 66 20 26 20 30 78 30 46  ort) (_bf & 0x0F
08a0: 46 46 29 3b 20 7d 0a 09 62 6f 6f 6c 20 20 20 66  FF); }..bool   f
08b0: 52 65 73 70 6f 6e 73 65 28 29 20 7b 20 72 65 74  Response() { ret
08c0: 75 72 6e 20 63 61 73 74 28 62 6f 6f 6c 29 20 20  urn cast(bool)  
08d0: 20 28 5f 62 66 20 26 20 30 78 31 30 30 30 29 3b   (_bf & 0x1000);
08e0: 20 7d 0a 09 62 6f 6f 6c 20 20 20 66 52 65 6c 65   }..bool   fRele
08f0: 61 73 65 28 29 20 20 7b 20 72 65 74 75 72 6e 20  ase()  { return 
0900: 63 61 73 74 28 62 6f 6f 6c 29 20 20 20 28 5f 62  cast(bool)   (_b
0910: 66 20 26 20 30 78 32 30 30 30 29 3b 20 7d 0a 09  f & 0x2000); }..
0920: 62 6f 6f 6c 20 20 20 72 65 73 65 72 76 65 64 28  bool   reserved(
0930: 29 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74  )  { return cast
0940: 28 62 6f 6f 6c 29 20 20 20 28 5f 62 66 20 26 20  (bool)   (_bf & 
0950: 30 78 34 30 30 30 29 3b 20 7d 0a 09 62 6f 6f 6c  0x4000); }..bool
0960: 20 20 20 66 41 63 6b 52 65 71 28 29 20 20 20 7b     fAckReq()   {
0970: 20 72 65 74 75 72 6e 20 63 61 73 74 28 62 6f 6f   return cast(boo
0980: 6c 29 20 20 20 28 5f 62 66 20 26 20 30 78 38 30  l)   (_bf & 0x80
0990: 30 30 29 3b 20 7d 0a 0a 09 62 79 74 65 2a 20 20  00); }...byte*  
09a0: 56 61 6c 75 65 28 29 20 7b 20 72 65 74 75 72 6e  Value() { return
09b0: 20 26 5f 56 61 6c 75 65 3b 20 7d 0a 0a 09 75 73   &_Value; }...us
09c0: 68 6f 72 74 20 75 6e 75 73 65 64 28 75 73 68 6f  hort unused(usho
09d0: 72 74 20 72 29 20 7b 0a 09 09 5f 62 66 20 3d 20  rt r) {..._bf = 
09e0: 63 61 73 74 28 75 73 68 6f 72 74 29 20 28 28 5f  cast(ushort) ((_
09f0: 62 66 20 26 20 7e 30 78 30 46 46 46 29 20 7c 20  bf & ~0x0FFF) | 
0a00: 28 72 20 26 20 30 78 30 46 46 46 29 29 3b 0a 09  (r & 0x0FFF));..
0a10: 09 72 65 74 75 72 6e 20 63 61 73 74 28 75 73 68  .return cast(ush
0a20: 6f 72 74 29 28 72 20 26 20 30 78 30 46 46 46 29  ort)(r & 0x0FFF)
0a30: 3b 0a 09 7d 0a 0a 09 62 6f 6f 6c 20 20 20 66 52  ;..}...bool   fR
0a40: 65 73 70 6f 6e 73 65 28 62 6f 6f 6c 20 66 29 20  esponse(bool f) 
0a50: 7b 20 5f 62 66 20 3d 20 63 61 73 74 28 75 73 68  { _bf = cast(ush
0a60: 6f 72 74 29 20 28 28 5f 62 66 20 26 20 7e 30 78  ort) ((_bf & ~0x
0a70: 31 30 30 30 29 20 7c 20 28 66 20 3c 3c 20 31 32  1000) | (f << 12
0a80: 29 29 3b 20 72 65 74 75 72 6e 20 66 3b 20 7d 0a  )); return f; }.
0a90: 09 62 6f 6f 6c 20 20 20 66 52 65 6c 65 61 73 65  .bool   fRelease
0aa0: 28 62 6f 6f 6c 20 66 29 20 20 7b 20 5f 62 66 20  (bool f)  { _bf 
0ab0: 3d 20 63 61 73 74 28 75 73 68 6f 72 74 29 20 28  = cast(ushort) (
0ac0: 28 5f 62 66 20 26 20 7e 30 78 32 30 30 30 29 20  (_bf & ~0x2000) 
0ad0: 7c 20 28 66 20 3c 3c 20 31 33 29 29 3b 20 72 65  | (f << 13)); re
0ae0: 74 75 72 6e 20 66 3b 20 7d 0a 09 62 6f 6f 6c 20  turn f; }..bool 
0af0: 20 20 72 65 73 65 72 76 65 64 28 62 6f 6f 6c 20    reserved(bool 
0b00: 66 29 20 20 7b 20 5f 62 66 20 3d 20 63 61 73 74  f)  { _bf = cast
0b10: 28 75 73 68 6f 72 74 29 20 28 28 5f 62 66 20 26  (ushort) ((_bf &
0b20: 20 7e 30 78 34 30 30 30 29 20 7c 20 28 66 20 3c   ~0x4000) | (f <
0b30: 3c 20 31 34 29 29 3b 20 72 65 74 75 72 6e 20 66  < 14)); return f
0b40: 3b 20 7d 0a 09 62 6f 6f 6c 20 20 20 66 41 63 6b  ; }..bool   fAck
0b50: 52 65 71 28 62 6f 6f 6c 20 66 29 20 20 20 7b 20  Req(bool f)   { 
0b60: 5f 62 66 20 3d 20 63 61 73 74 28 75 73 68 6f 72  _bf = cast(ushor
0b70: 74 29 20 28 28 5f 62 66 20 26 20 7e 30 78 38 30  t) ((_bf & ~0x80
0b80: 30 30 29 20 7c 20 28 66 20 3c 3c 20 31 35 29 29  00) | (f << 15))
0b90: 3b 20 72 65 74 75 72 6e 20 66 3b 20 7d 0a 7d 0a  ; return f; }.}.
0ba0: 0a 73 74 72 75 63 74 20 44 44 45 50 4f 4b 45 20  .struct DDEPOKE 
0bb0: 7b 0a 09 75 73 68 6f 72 74 20 5f 62 66 3b 0a 09  {..ushort _bf;..
0bc0: 73 68 6f 72 74 20 20 63 66 46 6f 72 6d 61 74 3b  short  cfFormat;
0bd0: 0a 09 62 79 74 65 20 20 20 5f 56 61 6c 75 65 3b  ..byte   _Value;
0be0: 0a 0a 09 75 73 68 6f 72 74 20 75 6e 75 73 65 64  ...ushort unused
0bf0: 28 29 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63  ()    { return c
0c00: 61 73 74 28 75 73 68 6f 72 74 29 20 28 5f 62 66  ast(ushort) (_bf
0c10: 20 26 20 30 78 31 46 46 46 29 3b 20 7d 0a 09 62   & 0x1FFF); }..b
0c20: 6f 6f 6c 20 20 20 66 52 65 6c 65 61 73 65 28 29  ool   fRelease()
0c30: 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28    { return cast(
0c40: 62 6f 6f 6c 29 20 20 20 28 5f 62 66 20 26 20 30  bool)   (_bf & 0
0c50: 78 32 30 30 30 29 3b 20 7d 0a 09 75 62 79 74 65  x2000); }..ubyte
0c60: 20 20 66 52 65 73 65 72 76 65 64 28 29 20 7b 20    fReserved() { 
0c70: 72 65 74 75 72 6e 20 63 61 73 74 28 75 62 79 74  return cast(ubyt
0c80: 65 29 20 20 28 28 5f 62 66 20 26 20 30 78 43 30  e)  ((_bf & 0xC0
0c90: 30 30 29 20 3e 3e 3e 20 31 34 29 3b 20 7d 0a 0a  00) >>> 14); }..
0ca0: 09 62 79 74 65 2a 20 20 56 61 6c 75 65 28 29 20  .byte*  Value() 
0cb0: 7b 20 72 65 74 75 72 6e 20 26 5f 56 61 6c 75 65  { return &_Value
0cc0: 3b 20 7d 0a 0a 09 75 73 68 6f 72 74 20 75 6e 75  ; }...ushort unu
0cd0: 73 65 64 28 75 73 68 6f 72 74 20 75 29 20 7b 0a  sed(ushort u) {.
0ce0: 09 09 5f 62 66 20 3d 20 63 61 73 74 28 75 73 68  .._bf = cast(ush
0cf0: 6f 72 74 29 20 28 28 5f 62 66 20 26 20 7e 30 78  ort) ((_bf & ~0x
0d00: 31 46 46 46 29 20 7c 20 28 75 20 26 20 30 78 31  1FFF) | (u & 0x1
0d10: 46 46 46 29 29 3b 0a 09 09 72 65 74 75 72 6e 20  FFF));...return 
0d20: 63 61 73 74 28 75 73 68 6f 72 74 29 28 75 20 26  cast(ushort)(u &
0d30: 20 30 78 31 46 46 46 29 3b 0a 09 7d 0a 0a 09 62   0x1FFF);..}...b
0d40: 6f 6f 6c 20 20 20 66 52 65 6c 65 61 73 65 28 62  ool   fRelease(b
0d50: 6f 6f 6c 20 66 29 20 20 20 7b 20 5f 62 66 20 3d  ool f)   { _bf =
0d60: 20 63 61 73 74 28 75 73 68 6f 72 74 29 20 28 28   cast(ushort) ((
0d70: 5f 62 66 20 26 20 7e 30 78 32 30 30 30 29 20 7c  _bf & ~0x2000) |
0d80: 20 28 66 20 3c 3c 20 31 33 29 29 3b 20 72 65 74   (f << 13)); ret
0d90: 75 72 6e 20 66 3b 20 7d 0a 09 75 62 79 74 65 20  urn f; }..ubyte 
0da0: 20 66 52 65 73 65 72 76 65 64 28 75 62 79 74 65   fReserved(ubyte
0db0: 20 72 29 20 7b 20 5f 62 66 20 3d 20 63 61 73 74   r) { _bf = cast
0dc0: 28 75 73 68 6f 72 74 29 20 28 28 5f 62 66 20 26  (ushort) ((_bf &
0dd0: 20 7e 30 78 43 30 30 30 29 20 7c 20 28 72 20 3c   ~0xC000) | (r <
0de0: 3c 20 31 34 29 29 3b 20 72 65 74 75 72 6e 20 72  < 14)); return r
0df0: 3b 20 7d 0a 7d 0a 0a 64 65 70 72 65 63 61 74 65  ; }.}..deprecate
0e00: 64 20 73 74 72 75 63 74 20 44 44 45 4c 4e 20 7b  d struct DDELN {
0e10: 0a 09 75 73 68 6f 72 74 20 5f 62 66 3b 0a 09 73  ..ushort _bf;..s
0e20: 68 6f 72 74 20 20 63 66 46 6f 72 6d 61 74 3b 0a  hort  cfFormat;.
0e30: 0a 09 75 73 68 6f 72 74 20 75 6e 75 73 65 64 28  ..ushort unused(
0e40: 29 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61  )    { return ca
0e50: 73 74 28 75 73 68 6f 72 74 29 20 28 5f 62 66 20  st(ushort) (_bf 
0e60: 26 20 30 78 31 46 46 46 29 3b 20 7d 0a 09 62 6f  & 0x1FFF); }..bo
0e70: 6f 6c 20 20 20 66 52 65 6c 65 61 73 65 28 29 20  ol   fRelease() 
0e80: 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 62   { return cast(b
0e90: 6f 6f 6c 29 20 20 20 28 5f 62 66 20 26 20 30 78  ool)   (_bf & 0x
0ea0: 32 30 30 30 29 3b 20 7d 0a 09 62 6f 6f 6c 20 20  2000); }..bool  
0eb0: 20 66 44 65 66 65 72 55 70 64 28 29 20 7b 20 72   fDeferUpd() { r
0ec0: 65 74 75 72 6e 20 63 61 73 74 28 62 6f 6f 6c 29  eturn cast(bool)
0ed0: 20 20 20 28 5f 62 66 20 26 20 30 78 34 30 30 30     (_bf & 0x4000
0ee0: 29 3b 20 7d 0a 09 62 6f 6f 6c 20 20 20 66 41 63  ); }..bool   fAc
0ef0: 6b 52 65 71 28 29 20 20 20 7b 20 72 65 74 75 72  kReq()   { retur
0f00: 6e 20 63 61 73 74 28 62 6f 6f 6c 29 20 20 20 28  n cast(bool)   (
0f10: 5f 62 66 20 26 20 30 78 38 30 30 30 29 3b 20 7d  _bf & 0x8000); }
0f20: 0a 0a 09 75 73 68 6f 72 74 20 75 6e 75 73 65 64  ...ushort unused
0f30: 28 75 73 68 6f 72 74 20 75 29 20 7b 0a 09 09 5f  (ushort u) {..._
0f40: 62 66 20 3d 20 63 61 73 74 28 75 73 68 6f 72 74  bf = cast(ushort
0f50: 29 28 28 5f 62 66 20 26 20 7e 30 78 31 46 46 46  )((_bf & ~0x1FFF
0f60: 29 20 7c 20 28 75 20 26 20 30 78 31 46 46 46 29  ) | (u & 0x1FFF)
0f70: 29 3b 0a 09 09 72 65 74 75 72 6e 20 63 61 73 74  );...return cast
0f80: 28 75 73 68 6f 72 74 29 28 75 20 26 20 30 78 31  (ushort)(u & 0x1
0f90: 46 46 46 29 3b 0a 09 7d 0a 0a 09 62 6f 6f 6c 20  FFF);..}...bool 
0fa0: 20 20 66 52 65 6c 65 61 73 65 28 62 6f 6f 6c 20    fRelease(bool 
0fb0: 66 29 20 20 7b 20 5f 62 66 20 3d 20 63 61 73 74  f)  { _bf = cast
0fc0: 28 75 73 68 6f 72 74 29 20 28 28 5f 62 66 20 26  (ushort) ((_bf &
0fd0: 20 7e 30 78 32 30 30 30 29 20 7c 20 28 66 20 3c   ~0x2000) | (f <
0fe0: 3c 20 31 33 29 29 3b 20 72 65 74 75 72 6e 20 66  < 13)); return f
0ff0: 3b 20 7d 0a 09 62 6f 6f 6c 20 20 20 66 44 65 66  ; }..bool   fDef
1000: 65 72 55 70 64 28 62 6f 6f 6c 20 66 29 20 7b 20  erUpd(bool f) { 
1010: 5f 62 66 20 3d 20 63 61 73 74 28 75 73 68 6f 72  _bf = cast(ushor
1020: 74 29 20 28 28 5f 62 66 20 26 20 7e 30 78 34 30  t) ((_bf & ~0x40
1030: 30 30 29 20 7c 20 28 66 20 3c 3c 20 31 34 29 29  00) | (f << 14))
1040: 3b 20 72 65 74 75 72 6e 20 66 3b 20 7d 0a 09 62  ; return f; }..b
1050: 6f 6f 6c 20 20 20 66 41 63 6b 52 65 71 28 62 6f  ool   fAckReq(bo
1060: 6f 6c 20 66 29 20 20 20 7b 20 5f 62 66 20 3d 20  ol f)   { _bf = 
1070: 63 61 73 74 28 75 73 68 6f 72 74 29 20 28 28 5f  cast(ushort) ((_
1080: 62 66 20 26 20 7e 30 78 38 30 30 30 29 20 7c 20  bf & ~0x8000) | 
1090: 28 66 20 3c 3c 20 31 35 29 29 3b 20 72 65 74 75  (f << 15)); retu
10a0: 72 6e 20 66 3b 20 7d 0a 7d 0a 0a 64 65 70 72 65  rn f; }.}..depre
10b0: 63 61 74 65 64 20 73 74 72 75 63 74 20 44 44 45  cated struct DDE
10c0: 55 50 20 7b 0a 09 75 73 68 6f 72 74 20 5f 62 66  UP {..ushort _bf
10d0: 3b 0a 09 73 68 6f 72 74 20 20 63 66 46 6f 72 6d  ;..short  cfForm
10e0: 61 74 3b 0a 09 62 79 74 65 20 20 20 5f 72 67 62  at;..byte   _rgb
10f0: 3b 0a 0a 09 75 73 68 6f 72 74 20 75 6e 75 73 65  ;...ushort unuse
1100: 64 28 29 20 20 20 20 7b 20 72 65 74 75 72 6e 20  d()    { return 
1110: 63 61 73 74 28 75 73 68 6f 72 74 29 20 28 5f 62  cast(ushort) (_b
1120: 66 20 26 20 30 78 30 46 46 46 29 3b 20 7d 0a 09  f & 0x0FFF); }..
1130: 62 6f 6f 6c 20 20 20 66 41 63 6b 28 29 20 20 20  bool   fAck()   
1140: 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74     { return cast
1150: 28 62 6f 6f 6c 29 20 20 20 28 5f 62 66 20 26 20  (bool)   (_bf & 
1160: 30 78 31 30 30 30 29 3b 20 7d 0a 09 62 6f 6f 6c  0x1000); }..bool
1170: 20 20 20 66 52 65 6c 65 61 73 65 28 29 20 20 7b     fRelease()  {
1180: 20 72 65 74 75 72 6e 20 63 61 73 74 28 62 6f 6f   return cast(boo
1190: 6c 29 20 20 20 28 5f 62 66 20 26 20 30 78 32 30  l)   (_bf & 0x20
11a0: 30 30 29 3b 20 7d 0a 09 62 6f 6f 6c 20 20 20 66  00); }..bool   f
11b0: 52 65 73 65 72 76 65 64 28 29 20 7b 20 72 65 74  Reserved() { ret
11c0: 75 72 6e 20 63 61 73 74 28 62 6f 6f 6c 29 20 20  urn cast(bool)  
11d0: 20 28 5f 62 66 20 26 20 30 78 34 30 30 30 29 3b   (_bf & 0x4000);
11e0: 20 7d 0a 09 62 6f 6f 6c 20 20 20 66 41 63 6b 52   }..bool   fAckR
11f0: 65 71 28 29 20 20 20 7b 20 72 65 74 75 72 6e 20  eq()   { return 
1200: 63 61 73 74 28 62 6f 6f 6c 29 20 20 20 28 5f 62  cast(bool)   (_b
1210: 66 20 26 20 30 78 38 30 30 30 29 3b 20 7d 0a 0a  f & 0x8000); }..
1220: 09 62 79 74 65 2a 20 20 72 67 62 28 29 20 7b 20  .byte*  rgb() { 
1230: 72 65 74 75 72 6e 20 26 5f 72 67 62 3b 20 7d 0a  return &_rgb; }.
1240: 0a 09 75 73 68 6f 72 74 20 75 6e 75 73 65 64 28  ..ushort unused(
1250: 75 73 68 6f 72 74 20 72 29 20 7b 0a 09 09 5f 62  ushort r) {..._b
1260: 66 20 3d 20 63 61 73 74 28 75 73 68 6f 72 74 29  f = cast(ushort)
1270: 20 28 28 5f 62 66 20 26 20 7e 30 78 30 46 46 46   ((_bf & ~0x0FFF
1280: 29 20 7c 20 28 72 20 26 20 30 78 30 46 46 46 29  ) | (r & 0x0FFF)
1290: 29 3b 0a 09 09 72 65 74 75 72 6e 20 63 61 73 74  );...return cast
12a0: 28 75 73 68 6f 72 74 29 28 72 20 26 20 30 78 30  (ushort)(r & 0x0
12b0: 46 46 46 29 3b 0a 09 7d 0a 0a 09 62 6f 6f 6c 20  FFF);..}...bool 
12c0: 20 20 66 41 63 6b 28 62 6f 6f 6c 20 66 29 20 20    fAck(bool f)  
12d0: 20 20 20 20 7b 20 5f 62 66 20 3d 20 63 61 73 74      { _bf = cast
12e0: 28 75 73 68 6f 72 74 29 20 28 28 5f 62 66 20 26  (ushort) ((_bf &
12f0: 20 7e 30 78 31 30 30 30 29 20 7c 20 28 66 20 3c   ~0x1000) | (f <
1300: 3c 20 31 32 29 29 3b 20 72 65 74 75 72 6e 20 66  < 12)); return f
1310: 3b 20 7d 0a 09 62 6f 6f 6c 20 20 20 66 52 65 6c  ; }..bool   fRel
1320: 65 61 73 65 28 62 6f 6f 6c 20 66 29 20 20 7b 20  ease(bool f)  { 
1330: 5f 62 66 20 3d 20 63 61 73 74 28 75 73 68 6f 72  _bf = cast(ushor
1340: 74 29 20 28 28 5f 62 66 20 26 20 7e 30 78 32 30  t) ((_bf & ~0x20
1350: 30 30 29 20 7c 20 28 66 20 3c 3c 20 31 33 29 29  00) | (f << 13))
1360: 3b 20 72 65 74 75 72 6e 20 66 3b 20 7d 0a 09 62  ; return f; }..b
1370: 6f 6f 6c 20 20 20 66 52 65 73 65 72 76 65 64 28  ool   fReserved(
1380: 62 6f 6f 6c 20 66 29 20 7b 20 5f 62 66 20 3d 20  bool f) { _bf = 
1390: 63 61 73 74 28 75 73 68 6f 72 74 29 20 28 28 5f  cast(ushort) ((_
13a0: 62 66 20 26 20 7e 30 78 34 30 30 30 29 20 7c 20  bf & ~0x4000) | 
13b0: 28 66 20 3c 3c 20 31 34 29 29 3b 20 72 65 74 75  (f << 14)); retu
13c0: 72 6e 20 66 3b 20 7d 0a 09 62 6f 6f 6c 20 20 20  rn f; }..bool   
13d0: 66 41 63 6b 52 65 71 28 62 6f 6f 6c 20 66 29 20  fAckReq(bool f) 
13e0: 20 20 7b 20 5f 62 66 20 3d 20 63 61 73 74 28 75    { _bf = cast(u
13f0: 73 68 6f 72 74 29 20 28 28 5f 62 66 20 26 20 7e  short) ((_bf & ~
1400: 30 78 38 30 30 30 29 20 7c 20 28 66 20 3c 3c 20  0x8000) | (f << 
1410: 31 35 29 29 3b 20 72 65 74 75 72 6e 20 66 3b 20  15)); return f; 
1420: 7d 0a 7d 0a 0a 65 78 74 65 72 6e 20 28 57 69 6e  }.}..extern (Win
1430: 64 6f 77 73 29 20 7b 0a 09 42 4f 4f 4c 20 44 64  dows) {..BOOL Dd
1440: 65 53 65 74 51 75 61 6c 69 74 79 4f 66 53 65 72  eSetQualityOfSer
1450: 76 69 63 65 28 48 57 4e 44 2c 20 43 50 74 72 21  vice(HWND, CPtr!
1460: 28 53 45 43 55 52 49 54 59 5f 51 55 41 4c 49 54  (SECURITY_QUALIT
1470: 59 5f 4f 46 5f 53 45 52 56 49 43 45 29 2c 0a 09  Y_OF_SERVICE),..
1480: 20 20 50 53 45 43 55 52 49 54 59 5f 51 55 41 4c    PSECURITY_QUAL
1490: 49 54 59 5f 4f 46 5f 53 45 52 56 49 43 45 29 3b  ITY_OF_SERVICE);
14a0: 0a 09 42 4f 4f 4c 20 49 6d 70 65 72 73 6f 6e 61  ..BOOL Impersona
14b0: 74 65 44 64 65 43 6c 69 65 6e 74 57 69 6e 64 6f  teDdeClientWindo
14c0: 77 28 48 57 4e 44 2c 20 48 57 4e 44 29 3b 0a 09  w(HWND, HWND);..
14d0: 4c 50 41 52 41 4d 20 50 61 63 6b 44 44 45 6c 50  LPARAM PackDDElP
14e0: 61 72 61 6d 28 55 49 4e 54 2c 20 55 49 4e 54 5f  aram(UINT, UINT_
14f0: 50 54 52 2c 20 55 49 4e 54 5f 50 54 52 29 3b 0a  PTR, UINT_PTR);.
1500: 09 42 4f 4f 4c 20 55 6e 70 61 63 6b 44 44 45 6c  .BOOL UnpackDDEl
1510: 50 61 72 61 6d 28 55 49 4e 54 2c 20 4c 50 41 52  Param(UINT, LPAR
1520: 41 4d 2c 20 50 55 49 4e 54 5f 50 54 52 2c 20 50  AM, PUINT_PTR, P
1530: 55 49 4e 54 5f 50 54 52 29 3b 0a 09 42 4f 4f 4c  UINT_PTR);..BOOL
1540: 20 46 72 65 65 44 44 45 6c 50 61 72 61 6d 28 55   FreeDDElParam(U
1550: 49 4e 54 2c 20 4c 50 41 52 41 4d 29 3b 0a 09 4c  INT, LPARAM);..L
1560: 50 41 52 41 4d 20 52 65 75 73 65 44 44 45 6c 50  PARAM ReuseDDElP
1570: 61 72 61 6d 28 4c 50 41 52 41 4d 2c 20 55 49 4e  aram(LPARAM, UIN
1580: 54 2c 20 55 49 4e 54 2c 20 55 49 4e 54 5f 50 54  T, UINT, UINT_PT
1590: 52 2c 20 55 49 4e 54 5f 50 54 52 29 3b 0a 7d 0a  R, UINT_PTR);.}.
15a0: 0a 64 65 62 75 67 20 28 57 69 6e 64 6f 77 73 55  .debug (WindowsU
15b0: 6e 69 74 54 65 73 74 29 20 7b 0a 09 75 6e 69 74  nitTest) {..unit
15c0: 74 65 73 74 20 7b 0a 09 09 44 44 45 41 43 4b 20  test {...DDEACK 
15d0: 64 64 65 61 63 6b 3b 0a 0a 09 09 77 69 74 68 20  ddeack;....with 
15e0: 28 64 64 65 61 63 6b 29 20 7b 0a 09 09 09 72 65  (ddeack) {....re
15f0: 73 65 72 76 65 64 20 3d 20 31 30 3b 0a 09 09 09  served = 10;....
1600: 61 73 73 65 72 74 20 28 5f 62 66 20 3d 3d 20 30  assert (_bf == 0
1610: 78 30 41 29 3b 0a 09 09 09 66 42 75 73 79 20 3d  x0A);....fBusy =
1620: 20 74 72 75 65 3b 0a 09 09 09 61 73 73 65 72 74   true;....assert
1630: 20 28 5f 62 66 20 3d 3d 20 30 78 34 41 29 3b 0a   (_bf == 0x4A);.
1640: 09 09 09 66 41 63 6b 20 3d 20 74 72 75 65 3b 0a  ...fAck = true;.
1650: 09 09 09 61 73 73 65 72 74 20 28 5f 62 66 20 3d  ...assert (_bf =
1660: 3d 20 30 78 43 41 29 3b 0a 0a 09 09 09 61 73 73  = 0xCA);.....ass
1670: 65 72 74 20 28 72 65 73 65 72 76 65 64 20 3d 3d  ert (reserved ==
1680: 20 31 30 29 3b 0a 09 09 09 61 73 73 65 72 74 20   10);....assert 
1690: 28 66 42 75 73 79 20 3d 3d 20 74 72 75 65 29 3b  (fBusy == true);
16a0: 0a 09 09 09 61 73 73 65 72 74 20 28 66 41 63 6b  ....assert (fAck
16b0: 20 3d 3d 20 74 72 75 65 29 3b 0a 0a 09 09 09 72   == true);.....r
16c0: 65 73 65 72 76 65 64 20 3d 20 34 33 3b 0a 09 09  eserved = 43;...
16d0: 09 61 73 73 65 72 74 20 28 5f 62 66 20 3d 3d 20  .assert (_bf == 
16e0: 30 78 45 42 29 3b 0a 09 09 09 66 42 75 73 79 20  0xEB);....fBusy 
16f0: 3d 20 66 61 6c 73 65 3b 0a 09 09 09 61 73 73 65  = false;....asse
1700: 72 74 20 28 5f 62 66 20 3d 3d 20 30 78 41 42 29  rt (_bf == 0xAB)
1710: 3b 0a 09 09 09 66 41 63 6b 20 3d 20 66 61 6c 73  ;....fAck = fals
1720: 65 3b 0a 09 09 09 61 73 73 65 72 74 20 28 5f 62  e;....assert (_b
1730: 66 20 3d 3d 20 30 78 32 42 29 3b 0a 0a 09 09 09  f == 0x2B);.....
1740: 61 73 73 65 72 74 20 28 72 65 73 65 72 76 65 64  assert (reserved
1750: 20 3d 3d 20 34 33 29 3b 0a 09 09 09 61 73 73 65   == 43);....asse
1760: 72 74 20 28 66 42 75 73 79 20 3d 3d 20 66 61 6c  rt (fBusy == fal
1770: 73 65 29 3b 0a 09 09 09 61 73 73 65 72 74 20 28  se);....assert (
1780: 66 41 63 6b 20 3d 3d 20 66 61 6c 73 65 29 3b 0a  fAck == false);.
1790: 09 09 7d 0a 0a 09 09 44 44 45 50 4f 4b 45 20 64  ..}....DDEPOKE d
17a0: 64 65 70 6f 6b 65 3b 0a 0a 09 09 77 69 74 68 20  depoke;....with 
17b0: 28 64 64 65 70 6f 6b 65 29 20 7b 0a 09 09 09 75  (ddepoke) {....u
17c0: 6e 75 73 65 64 20 3d 20 33 34 35 36 3b 0a 09 09  nused = 3456;...
17d0: 09 61 73 73 65 72 74 20 28 5f 62 66 20 3d 3d 20  .assert (_bf == 
17e0: 30 78 30 44 38 30 29 3b 0a 09 09 09 66 52 65 6c  0x0D80);....fRel
17f0: 65 61 73 65 20 3d 20 74 72 75 65 3b 0a 09 09 09  ease = true;....
1800: 61 73 73 65 72 74 20 28 5f 62 66 20 3d 3d 20 30  assert (_bf == 0
1810: 78 32 44 38 30 29 3b 0a 09 09 09 66 52 65 73 65  x2D80);....fRese
1820: 72 76 65 64 20 3d 20 32 3b 0a 09 09 09 61 73 73  rved = 2;....ass
1830: 65 72 74 20 28 5f 62 66 20 3d 3d 20 30 78 41 44  ert (_bf == 0xAD
1840: 38 30 29 3b 0a 0a 09 09 09 61 73 73 65 72 74 20  80);.....assert 
1850: 28 75 6e 75 73 65 64 20 3d 3d 20 33 34 35 36 29  (unused == 3456)
1860: 3b 0a 09 09 09 61 73 73 65 72 74 20 28 66 52 65  ;....assert (fRe
1870: 6c 65 61 73 65 20 3d 3d 20 74 72 75 65 29 3b 0a  lease == true);.
1880: 09 09 09 61 73 73 65 72 74 20 28 66 52 65 73 65  ...assert (fRese
1890: 72 76 65 64 20 3d 3d 20 32 29 3b 0a 0a 09 09 09  rved == 2);.....
18a0: 75 6e 75 73 65 64 20 3d 20 32 31 30 39 3b 0a 09  unused = 2109;..
18b0: 09 09 61 73 73 65 72 74 20 28 5f 62 66 20 3d 3d  ..assert (_bf ==
18c0: 20 30 78 61 38 33 64 29 3b 0a 09 09 09 66 52 65   0xa83d);....fRe
18d0: 6c 65 61 73 65 20 3d 20 66 61 6c 73 65 3b 0a 09  lease = false;..
18e0: 09 09 61 73 73 65 72 74 20 28 5f 62 66 20 3d 3d  ..assert (_bf ==
18f0: 20 30 78 38 38 33 64 29 3b 0a 09 09 09 66 52 65   0x883d);....fRe
1900: 73 65 72 76 65 64 20 3d 20 31 3b 0a 09 09 09 61  served = 1;....a
1910: 73 73 65 72 74 20 28 5f 62 66 20 3d 3d 20 30 78  ssert (_bf == 0x
1920: 34 38 33 64 29 3b 0a 0a 09 09 09 61 73 73 65 72  483d);.....asser
1930: 74 20 28 75 6e 75 73 65 64 20 3d 3d 20 32 31 30  t (unused == 210
1940: 39 29 3b 0a 09 09 09 61 73 73 65 72 74 20 28 66  9);....assert (f
1950: 52 65 6c 65 61 73 65 20 3d 3d 20 66 61 6c 73 65  Release == false
1960: 29 3b 0a 09 09 09 61 73 73 65 72 74 20 28 66 52  );....assert (fR
1970: 65 73 65 72 76 65 64 20 3d 3d 20 31 29 3b 0a 09  eserved == 1);..
1980: 09 7d 0a 09 7d 0a 7d 0a                          .}..}.}.