aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFritz Elfert <felfert@to.com>2001-05-22 21:19:20 +0000
committerFritz Elfert <felfert@to.com>2001-05-22 21:19:20 +0000
commit8a7831faf62daf131ca72ac8f6aea1528b077684 (patch)
tree885cdd30625f55d45bcfa9c73776a9828199b7eb
parent337514d73fc9315e18f90d6eaff367dfe5dc9909 (diff)
downloadplptools-8a7831faf62daf131ca72ac8f6aea1528b077684.tar.gz
plptools-8a7831faf62daf131ca72ac8f6aea1528b077684.tar.bz2
plptools-8a7831faf62daf131ca72ac8f6aea1528b077684.zip
More work on remote clipboard.
-rw-r--r--lib/rclip.cc67
-rw-r--r--lib/rclip.h23
-rw-r--r--lib/rfsv.h1
-rw-r--r--lib/rfsv32.cc2
-rw-r--r--lib/wprt.cc2
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();
diff --git a/lib/rfsv.h b/lib/rfsv.h
index ffa23fd..c054edb 100644
--- a/lib/rfsv.h
+++ b/lib/rfsv.h
@@ -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) {