Commit 45611798f7352fb86b48b42fbf799b208daa032e

Authored by Perry Werneck
1 parent 09e47663
Exists in master

Adding "set" methods.

src/include/py3270.h
@@ -117,6 +117,7 @@ @@ -117,6 +117,7 @@
117 DLL_PRIVATE PyObject * py3270_session_disconnect(PyObject *self, PyObject *args); 117 DLL_PRIVATE PyObject * py3270_session_disconnect(PyObject *self, PyObject *args);
118 118
119 DLL_PRIVATE PyObject * py3270_session_get(PyObject *self, PyObject *args); 119 DLL_PRIVATE PyObject * py3270_session_get(PyObject *self, PyObject *args);
  120 + DLL_PRIVATE PyObject * py3270_session_set(PyObject *self, PyObject *args);
120 DLL_PRIVATE PyObject * py3270_session_str(PyObject *self); 121 DLL_PRIVATE PyObject * py3270_session_str(PyObject *self);
121 122
122 /* 123 /*
src/module/init.c
@@ -88,6 +88,13 @@ static PyMethodDef py3270_session_methods[] = { @@ -88,6 +88,13 @@ static PyMethodDef py3270_session_methods[] = {
88 }, 88 },
89 89
90 { 90 {
  91 + "set",
  92 + (PyCFunction) py3270_session_set,
  93 + METH_VARARGS,
  94 + ""
  95 + },
  96 +
  97 + {
91 "get", 98 "get",
92 (PyCFunction) py3270_session_get, 99 (PyCFunction) py3270_session_get,
93 METH_VARARGS, 100 METH_VARARGS,
src/terminal/get.cc
@@ -83,7 +83,7 @@ @@ -83,7 +83,7 @@
83 83
84 } 84 }
85 85
86 - DLL_PRIVATE PyObject * py3270_session_str(PyObject *self) { 86 + PyObject * py3270_session_str(PyObject *self) {
87 87
88 return py3270_session_call(self, [](TN3270::Host &host){ 88 return py3270_session_call(self, [](TN3270::Host &host){
89 89
@@ -93,205 +93,3 @@ @@ -93,205 +93,3 @@
93 93
94 } 94 }
95 95
96 -  
97 - /*  
98 -DLL_PRIVATE PyObject * py3270_session_getattr(PyObject *self, char *attr_name) {  
99 -  
100 - PyObject * rc = NULL;  
101 -  
102 - printf("\n\n*************%s(%s)\n\n",__FUNCTION__,attr_name);  
103 -  
104 - try {  
105 -  
106 - TN3270::Property * property = ((pySession * ) self)->host->getProperty(attr_name);  
107 -  
108 - try {  
109 -  
110 - switch(property->getType()) {  
111 - case TN3270::Property::String:  
112 - rc = PyUnicode_FromString(property->toString().c_str());  
113 - break;  
114 -  
115 - case TN3270::Property::Boolean:  
116 - rc = PyBool_FromLong(property->toBool());  
117 - break;  
118 -  
119 - case TN3270::Property::Uchar:  
120 - throw std::system_error(ENOTSUP, std::system_category());  
121 - break;  
122 -  
123 - case TN3270::Property::Int16:  
124 - throw std::system_error(ENOTSUP, std::system_category());  
125 - break;  
126 -  
127 - case TN3270::Property::Uint16:  
128 - throw std::system_error(ENOTSUP, std::system_category());  
129 - break;  
130 -  
131 - case TN3270::Property::Int32:  
132 - rc = PyLong_FromLong(property->toInt32());  
133 - break;  
134 -  
135 - case TN3270::Property::Int32x:  
136 - throw std::system_error(ENOTSUP, std::system_category());  
137 - break;  
138 -  
139 - case TN3270::Property::Uint32:  
140 - rc = PyLong_FromLong(property->toUint32());  
141 - break;  
142 -  
143 - case TN3270::Property::Int64:  
144 - throw std::system_error(ENOTSUP, std::system_category());  
145 - break;  
146 -  
147 - case TN3270::Property::Uint64:  
148 - throw std::system_error(ENOTSUP, std::system_category());  
149 - break;  
150 -  
151 - default:  
152 - throw runtime_error("Unexpected property type");  
153 - }  
154 -  
155 - } catch(...) {  
156 -  
157 - delete property;  
158 - throw;  
159 -  
160 - }  
161 -  
162 - delete property;  
163 -  
164 - } catch(const exception &e) {  
165 -  
166 - PyErr_SetString(PyExc_RuntimeError, e.what());  
167 -  
168 - } catch( ... ) {  
169 -  
170 - PyErr_SetString(PyExc_RuntimeError, "Unexpected error in core module");  
171 -  
172 - }  
173 -  
174 - return rc;  
175 -  
176 -}  
177 -*/  
178 -  
179 -  
180 -/*  
181 -PyObject * terminal_get_version(PyObject *self, PyObject *args) {  
182 -  
183 - return PyString_FromString( ((pw3270_TerminalObject *) self)->session->get_version().c_str() );  
184 -  
185 -}  
186 -  
187 -PyObject * terminal_get_revision(PyObject *self, PyObject *args) {  
188 -  
189 - return PyString_FromString( ((pw3270_TerminalObject *) self)->session->get_revision().c_str() );  
190 -  
191 -}  
192 -  
193 -PyObject * terminal_is_connected(PyObject *self, PyObject *args) {  
194 -  
195 - return PyBool_FromLong( ((pw3270_TerminalObject *) self)->session->is_connected() );  
196 -  
197 -}  
198 -  
199 -PyObject * terminal_is_ready(PyObject *self, PyObject *args) {  
200 -  
201 - return PyBool_FromLong( ((pw3270_TerminalObject *) self)->session->is_ready() );  
202 -  
203 -}  
204 -  
205 -PyObject * terminal_is_protected_at(PyObject *self, PyObject *args) {  
206 -  
207 - int rc, row, col;  
208 -  
209 - if (!PyArg_ParseTuple(args, "ii", &row, &col)) {  
210 - PyErr_SetString(terminalError, strerror(EINVAL));  
211 - return NULL;  
212 - }  
213 -  
214 - try {  
215 -  
216 - rc = ((pw3270_TerminalObject *) self)->session->get_is_protected_at(row,col);  
217 -  
218 - } catch(std::exception &e) {  
219 -  
220 - PyErr_SetString(terminalError, e.what());  
221 - return NULL;  
222 - }  
223 -  
224 - return PyBool_FromLong( rc );  
225 -  
226 -}  
227 -  
228 -  
229 -PyObject * terminal_cmp_string_at(PyObject *self, PyObject *args) {  
230 -  
231 - int row, col, rc;  
232 - const char *text;  
233 -  
234 - if (!PyArg_ParseTuple(args, "iis", &row, &col, &text)) {  
235 - PyErr_SetString(terminalError, strerror(EINVAL));  
236 - return NULL;  
237 - }  
238 -  
239 - try {  
240 -  
241 - rc = ((pw3270_TerminalObject *) self)->session->cmp_string_at(row,col,text);  
242 -  
243 - } catch(std::exception &e) {  
244 -  
245 - PyErr_SetString(terminalError, e.what());  
246 - return NULL;  
247 - }  
248 -  
249 - return PyLong_FromLong(rc);  
250 -  
251 -}  
252 -  
253 -PyObject * terminal_get_string_at(PyObject *self, PyObject *args) {  
254 -  
255 - int row, col, sz;  
256 - string rc;  
257 -  
258 - if (!PyArg_ParseTuple(args, "iii", &row, &col, &sz)) {  
259 - PyErr_SetString(terminalError, strerror(EINVAL));  
260 - return NULL;  
261 - }  
262 -  
263 - try {  
264 -  
265 - rc = ((pw3270_TerminalObject *) self)->session->get_string_at(row,col,sz);  
266 -  
267 - } catch(std::exception &e) {  
268 -  
269 - PyErr_SetString(terminalError, e.what());  
270 - return NULL;  
271 - }  
272 -  
273 - return PyString_FromString(rc.c_str());  
274 -  
275 -}  
276 -  
277 -PyObject * terminal_get_contents(PyObject *self) {  
278 -  
279 - string rc;  
280 -  
281 - try {  
282 -  
283 - rc = ((pw3270_TerminalObject *) self)->session->get_string();  
284 -  
285 - } catch(std::exception &e) {  
286 -  
287 - PyErr_SetString(terminalError, e.what());  
288 - return NULL;  
289 - }  
290 -  
291 - return PyString_FromString(rc.c_str());  
292 -  
293 -  
294 -  
295 -}  
296 -  
297 -*/  
src/terminal/set.cc
@@ -36,6 +36,59 @@ @@ -36,6 +36,59 @@
36 36
37 /*---[ Implement ]----------------------------------------------------------------------------------*/ 37 /*---[ Implement ]----------------------------------------------------------------------------------*/
38 38
  39 + PyObject * py3270_session_set(PyObject *self, PyObject *args) {
  40 +
  41 + return py3270_session_call(self, [args](TN3270::Host &host){
  42 +
  43 + switch(PyTuple_Size(args)) {
  44 + case 1: // Only text.
  45 + {
  46 + const char *text;
  47 +
  48 + if(!PyArg_ParseTuple(args, "s", &text))
  49 + return (PyObject *) NULL;
  50 +
  51 + host.push(text,-1);
  52 +
  53 + }
  54 + break;
  55 +
  56 + case 2: // Address and text.
  57 + {
  58 + int baddr;
  59 + const char *text;
  60 +
  61 + if(!PyArg_ParseTuple(args, "is", &baddr, &text))
  62 + return (PyObject *) NULL;
  63 +
  64 + host.push(baddr, text);
  65 + }
  66 + break;
  67 +
  68 + case 3: // Row, col and text
  69 + {
  70 + unsigned int row, col;
  71 + const char *text;
  72 +
  73 + if (!PyArg_ParseTuple(args, "IIs", &row, &col, &text))
  74 + return (PyObject *) NULL;
  75 +
  76 + host.push(row,col,text);
  77 +
  78 + }
  79 + break;
  80 +
  81 + default:
  82 + throw std::system_error(EINVAL, std::system_category());
  83 +
  84 + }
  85 +
  86 + return PyLong_FromLong(0);
  87 +
  88 + });
  89 +
  90 + }
  91 +
39 92
40 /* 93 /*
41 PyObject * terminal_set_string_at(PyObject *self, PyObject *args) { 94 PyObject * terminal_set_string_at(PyObject *self, PyObject *args) {
testprograms/sample.py
@@ -26,9 +26,15 @@ print(session.connected) @@ -26,9 +26,15 @@ print(session.connected)
26 26
27 #print(session.get(14,22,38)) 27 #print(session.get(14,22,38))
28 28
29 -#print "-----------------------------------------------------------------------" 29 +print("-----------------------------------------------------------------------")
30 print(session) 30 print(session)
31 -#print "-----------------------------------------------------------------------" 31 +print("-----------------------------------------------------------------------")
  32 +
  33 +session.set("value")
  34 +
  35 +print("-----------------------------------------------------------------------")
  36 +print(session)
  37 +print("-----------------------------------------------------------------------")
32 38
33 del session 39 del session
34 input("Press enter to exit") 40 input("Press enter to exit")