diff options
author | Fritz Elfert <felfert@to.com> | 2001-05-22 21:19:20 +0000 |
---|---|---|
committer | Fritz Elfert <felfert@to.com> | 2001-05-22 21:19:20 +0000 |
commit | 8a7831faf62daf131ca72ac8f6aea1528b077684 (patch) | |
tree | 885cdd30625f55d45bcfa9c73776a9828199b7eb | |
parent | 337514d73fc9315e18f90d6eaff367dfe5dc9909 (diff) | |
download | plptools-8a7831faf62daf131ca72ac8f6aea1528b077684.tar.gz plptools-8a7831faf62daf131ca72ac8f6aea1528b077684.tar.bz2 plptools-8a7831faf62daf131ca72ac8f6aea1528b077684.zip |
More work on remote clipboard.
-rw-r--r-- | lib/rclip.cc | 67 | ||||
-rw-r--r-- | lib/rclip.h | 23 | ||||
-rw-r--r-- | lib/rfsv.h | 1 | ||||
-rw-r--r-- | lib/rfsv32.cc | 2 | ||||
-rw-r--r-- | lib/wprt.cc | 2 |
5 files changed, 72 insertions, 23 deletions
diff --git a/lib/rclip.cc b/lib/rclip.cc index b8df5fe..6c55c39 100644 --- a/lib/rclip.cc +++ b/lib/rclip.cc @@ -82,14 +82,14 @@ getStatus(void) const char *rclip:: getConnectName(void) { - return "SYS$RCLIP"; + return "CLIPSVR.RSY"; } // // protected internals // bool rclip:: -sendCommand(enum commands cc, bufferStore & data) +sendCommand(enum commands cc) { if (status == rfsv::E_PSI_FILE_DISC) { reconnect(); @@ -99,7 +99,13 @@ sendCommand(enum commands cc, bufferStore & data) bool result; bufferStore a; a.addByte(cc); - a.addBuff(data); + switch (cc) { + case RCLIP_INIT: + a.addWord(0x100); + break; + case RCLIP_NOTIFY: + a.addByte(0); + } result = skt->sendBufferStore(a); if (!result) { reconnect(); @@ -111,31 +117,70 @@ sendCommand(enum commands cc, bufferStore & data) } Enum<rfsv::errs> rclip:: -putData(bufferStore &) { +sendListen() { + if (sendCommand(RCLIP_LISTEN)) + return rfsv::E_PSI_GEN_NONE; + else + return rfsv::E_PSI_GEN_FAIL; +} + +Enum<rfsv::errs> rclip:: +checkNotify() { + Enum<rfsv::errs> ret; + + bufferStore a; + if ((ret = getResponse(a)) != rfsv::E_PSI_GEN_NONE) + cerr << "RCLIP ERR:" << a << endl; + else { + if (a.getLen() != 1) + ret = rfsv::E_PSI_GEN_FAIL; + if (a.getByte(0) != 0) + ret = rfsv::E_PSI_GEN_FAIL; + } + return ret; +} + +Enum<rfsv::errs> rclip:: +waitNotify() { Enum<rfsv::errs> ret; bufferStore a; - a.addWord(0); - sendCommand(RCLIP_INIT, a); + sendCommand(RCLIP_LISTEN); if ((ret = getResponse(a)) != rfsv::E_PSI_GEN_NONE) cerr << "RCLIP ERR:" << a << endl; else { - if (a.getLen() != 3) + if (a.getLen() != 1) ret = rfsv::E_PSI_GEN_FAIL; - if ((a.getByte(0) != 0) || (a.getWord(1) != 2)) + if (a.getByte(0) != 0) ret = rfsv::E_PSI_GEN_FAIL; } return ret; } Enum<rfsv::errs> rclip:: -getData(bufferStore &buf) { +notify() { Enum<rfsv::errs> ret; bufferStore a; - sendCommand(RCLIP_GET, buf); - if ((ret = getResponse(buf)) != rfsv::E_PSI_GEN_NONE) + sendCommand(RCLIP_NOTIFY); + if ((ret = getResponse(a)) != rfsv::E_PSI_GEN_NONE) + cerr << "RCLIP ERR:" << a << endl; + if (a.getLen() != 1) + ret = rfsv::E_PSI_GEN_FAIL; + if (a.getByte(0) != RCLIP_NOTIFY) + ret = rfsv::E_PSI_GEN_FAIL; + return ret; +} + +Enum<rfsv::errs> rclip:: +initClipbd() { + Enum<rfsv::errs> ret = rfsv::E_PSI_GEN_NONE; + bufferStore a; + + sendCommand(RCLIP_INIT); + if ((ret = getResponse(a)) != rfsv::E_PSI_GEN_NONE) cerr << "RCLIP ERR:" << a << endl; + cout << "RCLIP RESP: " << a << endl; return ret; } diff --git a/lib/rclip.h b/lib/rclip.h index 617f31b..9d3f54b 100644 --- a/lib/rclip.h +++ b/lib/rclip.h @@ -65,23 +65,24 @@ public: */ Enum<rfsv::errs> getStatus(); - /** - * Get Remote ClipBoard Data - */ - Enum<rfsv::errs> getData(bufferStore &buf); + Enum<rfsv::errs> initClipbd(); - /** - * Put Data to Remote ClipBoard - */ - Enum<rfsv::errs> putData(bufferStore &buf); + Enum<rfsv::errs> sendListen(); + + Enum<rfsv::errs> checkNotify(); + + Enum<rfsv::errs> waitNotify(); + + Enum<rfsv::errs> notify(); protected: /** * The possible commands. */ enum commands { - RCLIP_INIT = 0x0100, - RCLIP_GET = 0xf0f0, + RCLIP_INIT = 0x00, + RCLIP_NOTIFY = 0x08, + RCLIP_LISTEN = 0x04, }; /** @@ -109,7 +110,7 @@ protected: * * @returns true on success, false on failure. */ - bool sendCommand(enum commands cc, bufferStore &data); + bool sendCommand(enum commands cc); Enum<rfsv::errs> getResponse(bufferStore &data); const char *getConnectName(); @@ -102,6 +102,7 @@ public: PSI_O_EXCL = 00200, PSI_O_TRUNC = 01000, PSI_O_APPEND = 02000, + PSI_O_SHARE = 04000, }; /** diff --git a/lib/rfsv32.cc b/lib/rfsv32.cc index a28d2f2..f1718d2 100644 --- a/lib/rfsv32.cc +++ b/lib/rfsv32.cc @@ -211,6 +211,8 @@ opMode(const u_int32_t mode) ret |= (((mode & 03) == PSI_O_RDONLY) ? 0 : EPOC_OMODE_READ_WRITE); if (!ret) ret |= (mode & PSI_O_EXCL) ? 0 : EPOC_OMODE_SHARE_READERS; + if ((!ret) && (mode & PSI_O_SHARE)) + ret |= EPOC_OMODE_SHARE_ANY; return ret; } diff --git a/lib/wprt.cc b/lib/wprt.cc index 89d037f..bd87b8a 100644 --- a/lib/wprt.cc +++ b/lib/wprt.cc @@ -98,7 +98,7 @@ sendCommand(enum commands cc, bufferStore & data) } bool result; bufferStore a; - a.addByte(cc); + a.addWord(cc); a.addBuff(data); result = skt->sendBufferStore(a); if (!result) { |