home *** CD-ROM | disk | FTP | other *** search
/ PC Direkt 1995 March / PCD_395.iso / starview / wntmsci / german / svdde.hx0 / SVDDE.HXX
Encoding:
Text File  |  1994-01-21  |  10.1 KB  |  423 lines

  1. /*******************************************************************
  2. *  SVDDE.HXX
  3. *  (c) 1992-1994 STAR DIVISION
  4. *******************************************************************/
  5.  
  6. #ifndef _SVDDE_HXX
  7. #define _SVDDE_HXX
  8.  
  9. #ifndef _SV_HXX
  10. #include <sv.hxx>
  11. #endif
  12.  
  13. class  DdeString;
  14. class  DdeData;
  15. class  DdeConnection;
  16. class  DdeTransaction;
  17. class  DdeLink;
  18. class  DdeRequest;
  19. class  DdeWarmLink;
  20. class  DdeHotLink;
  21. class  DdePoke;
  22. class  DdeExecute;
  23. class  DdeItem;
  24. class  DdeTopic;
  25. class  DdeService;
  26. class  ConvList;
  27. struct DdeDataImp;
  28. struct DdeImp;
  29.  
  30. DECLARE_LIST( DdeConnections, DdeConnection* );
  31. DECLARE_LIST( DdeTransactions, DdeTransaction* );
  32. DECLARE_LIST( DdeServices, DdeService* );
  33. DECLARE_LIST( DdeTopics, DdeTopic* );
  34. DECLARE_LIST( DdeItems, DdeItem* );
  35. DECLARE_LIST( DdeFormats, long );
  36. DECLARE_LIST( StringList, String* );
  37.  
  38. // -----------
  39. // - DdeData -
  40. // -----------
  41.  
  42. class DdeData
  43. {
  44.     friend class    DdeInternal;
  45.     friend class    DdeService;
  46.     friend class    DdeConnection;
  47.     friend class    DdeTransaction;
  48.     DdeDataImp*     pImp;
  49.     void            Lock();
  50.  
  51. public:
  52.                     DdeData();
  53.                     DdeData( const char*, long, ULONG = FORMAT_STRING );
  54.                     DdeData( const String& );
  55.                     DdeData( const DdeData& );
  56.                     ~DdeData();
  57.  
  58.     operator const  char*() const;
  59.     operator        long() const;
  60.  
  61.     ULONG           GetFormat() const;
  62.  
  63.     DdeData&        operator = ( const DdeData& );
  64. };
  65.  
  66. // ------------------
  67. // - DdeServiceList -
  68. // ------------------
  69.  
  70. class DdeServiceList
  71. {
  72.     StringList      aServices;
  73.  
  74.                     DdeServiceList( const DdeServiceList& );
  75.     int             operator= ( const DdeServiceList& );
  76.  
  77. public:
  78.                     DdeServiceList( const String* = NULL );
  79.                     ~DdeServiceList();
  80.  
  81.     StringList&     GetServices() { return aServices; }
  82. };
  83.  
  84. // ----------------
  85. // - DdeTopicList -
  86. // ----------------
  87.  
  88. class DdeTopicList : public LinkHdl
  89. {
  90.     StringList      aTopics;
  91.     void            Data( const DdeData* );
  92.  
  93. public:
  94.                     DdeTopicList( const String& );
  95.                     ~DdeTopicList();
  96.  
  97.     StringList&     GetTopics() { return aTopics; }
  98. };
  99.  
  100. // ------------------
  101. // - DdeTransaction -
  102. // ------------------
  103.  
  104. class DdeTransaction : public LinkHdl
  105. {
  106.     friend class    DdeInternal;
  107.     friend class    DdeConnection;
  108.  
  109.                     DdeTransaction( const DdeTransaction& );
  110.     int             operator= ( const DdeTransaction& );
  111.  
  112. protected:
  113.     DdeConnection&  rDde;
  114.     DdeData         aDdeData;
  115.     DdeString*      pName;
  116.     short           nType;
  117.     long            nId;
  118.     long            nTime;
  119.     Link            aData;
  120.     Link            aDone;
  121.     BOOL            bBusy;
  122.  
  123.                     DdeTransaction( DdeConnection&, const String&, long = 0 );
  124.  
  125. public:
  126.                     ~DdeTransaction();
  127.  
  128.     BOOL            IsBusy() { return bBusy; }
  129.     const String&   GetName();
  130.  
  131.     void            Execute();
  132.  
  133.     Link            ChangeDataHdl( const Link& );
  134.     Link            GetDataHdl() const { return aData; }
  135.  
  136.     virtual void    Data( const DdeData* );
  137.  
  138.     Link            ChangeDoneHdl( const Link& );
  139.     Link            GetDoneHdl() const { return aDone; }
  140.     virtual void    Done();
  141. };
  142.  
  143. inline Link DdeTransaction::ChangeDataHdl( const Link& rHdl )
  144. {
  145.     Link aOld = aData;
  146.     aData = rHdl;
  147.     return aOld;
  148. }
  149.  
  150. inline Link DdeTransaction::ChangeDoneHdl( const Link& rHdl )
  151. {
  152.     Link aOld = aDone;
  153.     aDone = rHdl;
  154.     return aOld;
  155. }
  156.  
  157. // -----------
  158. // - DdeLink -
  159. // -----------
  160.  
  161. class DdeLink : public DdeTransaction
  162. {
  163.     Link            aNotify;
  164.  
  165. public:
  166.                     DdeLink( DdeConnection&, const String&, long = 0 );
  167.                     ~DdeLink();
  168.  
  169.     Link            ChangeNotifyHdl( const Link& );
  170.     Link            GetNotifyHdl() const { return aNotify; }
  171.     virtual void    Notify();
  172. };
  173.  
  174. inline Link DdeLink::ChangeNotifyHdl( const Link& rHdl )
  175. {
  176.     Link aOld = aNotify;
  177.     aNotify = rHdl;
  178.     return aOld;
  179. }
  180.  
  181. // ---------------
  182. // - DdeWarmLink -
  183. // ---------------
  184.  
  185. class DdeWarmLink : public DdeLink
  186. {
  187. public:
  188.             DdeWarmLink( DdeConnection&, const String&, long = 0 );
  189. };
  190.  
  191. // --------------
  192. // - DdeHotLink -
  193. // --------------
  194.  
  195. class DdeHotLink : public DdeLink
  196. {
  197. public:
  198.             DdeHotLink( DdeConnection&, const String&, long = 0 );
  199. };
  200.  
  201. // --------------
  202. // - DdeRequest -
  203. // --------------
  204.  
  205. class DdeRequest : public DdeTransaction
  206. {
  207. public:
  208.             DdeRequest( DdeConnection&, const String&, long = 0 );
  209. };
  210.  
  211. // -----------
  212. // - DdePoke -
  213. // -----------
  214.  
  215. class DdePoke : public DdeTransaction
  216. {
  217. public:
  218.             DdePoke( DdeConnection&, const String&, const char*, long,
  219.                      ULONG = FORMAT_STRING, long = 0 );
  220.             DdePoke( DdeConnection&, const String&, const DdeData&, long = 0 );
  221.             DdePoke( DdeConnection&, const String&, const String&, long = 0 );
  222. };
  223.  
  224. // --------------
  225. // - DdeExecute -
  226. // --------------
  227.  
  228. class DdeExecute : public DdeTransaction
  229. {
  230. public:
  231.             DdeExecute( DdeConnection&, const String&, long = 0 );
  232. };
  233.  
  234. // -----------------
  235. // - DdeConnection -
  236. // -----------------
  237.  
  238. class DdeConnection
  239. {
  240.     friend class    DdeInternal;
  241.     friend class    DdeTransaction;
  242.     static DdeConnections* pConnections;
  243.     DdeTransactions aTransactions;
  244.     DdeString*      pService;
  245.     DdeString*      pTopic;
  246.     DdeImp*         pImp;
  247.  
  248.                     DdeConnection( const DdeConnection& );
  249.     int             operator= ( const DdeConnection& );
  250.  
  251. public:
  252.                     DdeConnection( const String&, const String& );
  253.                     ~DdeConnection();
  254.  
  255.     long            GetError();
  256.     long            GetConvId();
  257.  
  258.     static const DdeConnections& GetConnections() { return *pConnections; }
  259.  
  260.     BOOL            IsConnected();
  261.  
  262.     const String&   GetServiceName();
  263.     const String&   GetTopicName();
  264. };
  265.  
  266. // -----------
  267. // - DdeItem -
  268. // -----------
  269.  
  270. class DdeItem
  271. {
  272.     friend class    DdeInternal;
  273.     friend class    DdeTopic;
  274.     DdeString*      pName;
  275.     short           nMonitor;
  276.  
  277. public:
  278.                     DdeItem( const char* );
  279.                     DdeItem( const String& );
  280.                     DdeItem( const DdeItem& );
  281.                     ~DdeItem();
  282.  
  283.     const String&   GetName();
  284.     short           GetLinks() { return nMonitor; }
  285. };
  286.  
  287. // ------------
  288. // - DdeTopic -
  289. // ------------
  290.  
  291. class DdeTopic : public LinkHdl
  292. {
  293.     friend class    DdeInternal;
  294.     friend class    DdeService;
  295.     DdeString*      pName;
  296.     String          aItem;
  297.     DdeItems        aItems;
  298.     Link            aConnectLink;
  299.     Link            aDisconnectLink;
  300.     Link            aGetLink;
  301.     Link            aPutLink;
  302.     Link            aExecLink;
  303.  
  304.                     DdeTopic( const DdeTopic& );
  305.     int             operator= ( const DdeTopic& );
  306.  
  307. public:
  308.                     DdeTopic( const String& );
  309.                     ~DdeTopic();
  310.  
  311.     const String&   GetName();
  312.     long            GetConvId();
  313.  
  314.     Link            ChangeConnectHdl( const Link& );
  315.     Link            GetConnectHdl() const { return aConnectLink;  }
  316.     virtual void    Connect( long );
  317.  
  318.     Link            ChangeDisconnectHdl( const Link& );
  319.     Link            GetDisconnectHdl() const { return aDisconnectLink;  }
  320.     virtual void    Disconnect( long );
  321.  
  322.     Link            ChangeGetHdl( const Link& );
  323.     Link            GetGetHdl() const { return aGetLink;  }
  324.     virtual DdeData* Get( ULONG );
  325.  
  326.     Link            ChangePutHdl( const Link& );
  327.     Link            GetPutHdl() const { return aPutLink;  }
  328.     virtual BOOL    Put( const DdeData* );
  329.  
  330.     Link            ChangeExecuteHdl( const Link& );
  331.     Link            GetExecuteHdl() const { return aExecLink; }
  332.     virtual BOOL    Execute( const String* );
  333.  
  334.     void            NotifyClient( const String& );
  335.     BOOL            IsSystemTopic();
  336.  
  337.     void            AddItem( const DdeItem& );
  338.     void            RemoveItem( const DdeItem& );
  339.     const String&   GetCurItem() { return aItem;  }
  340.     const DdeItems& GetItems()   { return aItems; }
  341. };
  342.  
  343. inline Link DdeTopic::ChangeConnectHdl( const Link& rNew )
  344. {
  345.     Link aOld = aConnectLink;
  346.     aConnectLink = rNew;
  347.     return aOld;
  348. }
  349.  
  350. inline Link DdeTopic::ChangeDisconnectHdl( const Link& rNew )
  351. {
  352.     Link aOld = aDisconnectLink;
  353.     aDisconnectLink = rNew;
  354.     return aOld;
  355. }
  356.  
  357. inline Link DdeTopic::ChangeGetHdl( const Link& rNew )
  358. {
  359.     Link aOld = aGetLink;
  360.     aGetLink = rNew;
  361.     return aOld;
  362. }
  363.  
  364. inline Link DdeTopic::ChangePutHdl( const Link& rNew )
  365. {
  366.     Link aOld = aPutLink;
  367.     aPutLink = rNew;
  368.     return aOld;
  369. }
  370.  
  371. inline Link DdeTopic::ChangeExecuteHdl( const Link& rNew )
  372. {
  373.     Link aOld = aExecLink;
  374.     aExecLink = rNew;
  375.     return aOld;
  376. }
  377.  
  378. // --------------
  379. // - DdeService -
  380. // --------------
  381.  
  382. class DdeService
  383. {
  384.     friend class    DdeInternal;
  385.     DdeTopics       aTopics;
  386.     DdeFormats      aFormats;
  387.     DdeTopic*       pSysTopic;
  388.     DdeString*      pName;
  389.     ConvList*       pConv;
  390.     short           nStatus;
  391.  
  392.     BOOL            HasCbFormat( short );
  393.     String          Topics();
  394.     String          Formats();
  395.     String          SysItems();
  396.     String          Status();
  397.  
  398.                     DdeService( const DdeService& );
  399.     int             operator= ( const DdeService& );
  400.  
  401. public:
  402.                     DdeService( const String& );
  403.                     ~DdeService();
  404.  
  405.     const String&   GetName();
  406.     short           GetError()              { return nStatus; }
  407.  
  408.     static DdeServices& GetServices();
  409.     DdeTopics&      GetTopics()             { return aTopics;    }
  410.  
  411.     void            AddTopic( const DdeTopic& );
  412.     void            RemoveTopic( const DdeTopic& );
  413.  
  414.     void            AddFormat( ULONG );
  415.     void            RemoveFormat( ULONG );
  416.     BOOL            HasFormat( ULONG );
  417.  
  418.     virtual BOOL    IsBusy();
  419.     virtual String  GetHelp();
  420. };
  421.  
  422. #endif // _SVDDE_HXX
  423.