Commit 19d4f4f6cc5e73d4899805ce546b9db2eae34289

Authored by Perry Werneck
1 parent 75c9305c

Updating properties and getter/setter c++ methods.

src/include/lib3270++.h
@@ -215,6 +215,7 @@ @@ -215,6 +215,7 @@
215 // Get properties. 215 // Get properties.
216 virtual void getProperty(const char *name, int &value) const = 0; 216 virtual void getProperty(const char *name, int &value) const = 0;
217 virtual void getProperty(const char *name, std::string &value) const = 0; 217 virtual void getProperty(const char *name, std::string &value) const = 0;
  218 + virtual void getProperty(const char *name, bool &value) const = 0;
218 219
219 virtual std::string getVersion() const = 0; 220 virtual std::string getVersion() const = 0;
220 virtual std::string getRevision() const = 0; 221 virtual std::string getRevision() const = 0;
src/lib3270++/ipc/session.cc
@@ -235,6 +235,10 @@ @@ -235,6 +235,10 @@
235 235
236 } 236 }
237 237
  238 + void IPC::Session::getProperty(const char *name, bool &value) const {
  239 + throw std::system_error(ENOENT, std::system_category());
  240 + }
  241 +
238 /// @brief Get lib3270 version. 242 /// @brief Get lib3270 version.
239 std::string IPC::Session::getVersion() const { 243 std::string IPC::Session::getVersion() const {
240 244
src/lib3270++/local/session.cc
@@ -38,9 +38,10 @@ @@ -38,9 +38,10 @@
38 38
39 #include "../private.h" 39 #include "../private.h"
40 #include <lib3270/actions.h> 40 #include <lib3270/actions.h>
  41 + #include <lib3270/properties.h>
  42 + #include <cstring>
41 43
42 extern "C" { 44 extern "C" {
43 - #include <lib3270/actions.h>  
44 #include <lib3270/session.h> 45 #include <lib3270/session.h>
45 } 46 }
46 47
@@ -149,11 +150,68 @@ @@ -149,11 +150,68 @@
149 } 150 }
150 151
151 void Local::Session::getProperty(const char *name, int &value) const { 152 void Local::Session::getProperty(const char *name, int &value) const {
152 - throw std::system_error(ENOTSUP, std::system_category()); 153 +
  154 + const LIB3270_INT_PROPERTY * intprop = lib3270_get_int_properties_list();
  155 + for(size_t ix = 0; intprop[ix].name; ix++) {
  156 +
  157 + if(!strcasecmp(name,intprop[ix].name)) {
  158 +
  159 + std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);
  160 +
  161 + value = intprop[ix].get(hSession);
  162 +
  163 + if(value < 0 && errno != 0) {
  164 + throw std::system_error(errno, std::system_category());
  165 + }
  166 +
  167 +
  168 + }
  169 +
  170 + }
  171 +
  172 + throw std::system_error(ENOENT, std::system_category());
  173 +
153 } 174 }
154 175
155 void Local::Session::getProperty(const char *name, std::string &value) const { 176 void Local::Session::getProperty(const char *name, std::string &value) const {
156 - throw std::system_error(ENOTSUP, std::system_category()); 177 +
  178 + const LIB3270_STRING_PROPERTY * strprop = lib3270_get_string_properties_list();
  179 +
  180 + for(size_t ix = 0; strprop[ix].name; ix++) {
  181 +
  182 + if(!strcasecmp(name,strprop[ix].name)) {
  183 +
  184 + std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);
  185 +
  186 + // Found it!
  187 + const char * str = strprop[ix].get(hSession);
  188 +
  189 + if(str) {
  190 + value.assign(str);
  191 + return;
  192 + }
  193 +
  194 + throw std::system_error(errno, std::system_category());
  195 +
  196 + }
  197 +
  198 + }
  199 +
  200 + throw std::system_error(ENOENT, std::system_category());
  201 + }
  202 +
  203 + void Local::Session::getProperty(const char *name, bool &value) const {
  204 +
  205 + LIB3270_TOGGLE toggle = lib3270_get_toggle_id(name);
  206 + if(toggle != (LIB3270_TOGGLE) -1) {
  207 +
  208 + // Is a Tn3270 toggle, get it!
  209 + std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);
  210 + value = lib3270_get_toggle(hSession,toggle);
  211 +
  212 + }
  213 +
  214 + throw std::system_error(ENOENT, std::system_category());
157 } 215 }
158 216
159 ProgramMessage Local::Session::getProgramMessage() const { 217 ProgramMessage Local::Session::getProgramMessage() const {
src/lib3270++/private.h
@@ -179,6 +179,7 @@ @@ -179,6 +179,7 @@
179 // Get properties. 179 // Get properties.
180 void getProperty(const char *name, int &value) const override; 180 void getProperty(const char *name, int &value) const override;
181 void getProperty(const char *name, std::string &value) const override; 181 void getProperty(const char *name, std::string &value) const override;
  182 + void getProperty(const char *name, bool &value) const override;
182 183
183 std::string getVersion() const override; 184 std::string getVersion() const override;
184 std::string getRevision() const override; 185 std::string getRevision() const override;
@@ -312,6 +313,7 @@ @@ -312,6 +313,7 @@
312 // Get properties. 313 // Get properties.
313 void getProperty(const char *name, int &value) const override; 314 void getProperty(const char *name, int &value) const override;
314 void getProperty(const char *name, std::string &value) const override; 315 void getProperty(const char *name, std::string &value) const override;
  316 + void getProperty(const char *name, bool &value) const override;
315 317
316 std::string getVersion() const override; 318 std::string getVersion() const override;
317 std::string getRevision() const override; 319 std::string getRevision() const override;
src/lib3270++/testprogram/testprogram.cc
@@ -45,7 +45,7 @@ @@ -45,7 +45,7 @@
45 45
46 int main(int argc, const char *argv[]) { 46 int main(int argc, const char *argv[]) {
47 47
48 - TN3270::Host host{"pw3270:a"}; 48 + TN3270::Host host; //{"pw3270:a"};
49 49
50 cout 50 cout
51 << "Version: " << host.getVersion() 51 << "Version: " << host.getVersion()
src/lib3270/properties.c
@@ -297,6 +297,20 @@ @@ -297,6 +297,20 @@
297 NULL // Set value. 297 NULL // Set value.
298 }, 298 },
299 299
  300 + {
  301 + "version", // Property name.
  302 + N_( "lib3270 version" ), // Property description.
  303 + lib3270_get_version, // Get value.
  304 + NULL // Set value.
  305 + },
  306 +
  307 + {
  308 + "revision", // Property name.
  309 + N_( "lib3270 revision" ), // Property description.
  310 + lib3270_get_revision, // Get value.
  311 + NULL // Set value.
  312 + },
  313 +
300 /* 314 /*
301 { 315 {
302 "", // Property name. 316 "", // Property name.