From 61474b339d85b61672246edddbaff98864181845 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 12 Aug 2019 12:10:31 -0300 Subject: [PATCH] Refactoring hllapi module. --- .gitignore | 1 + src/core/calls.cc | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------- src/testprogram/testprogram.cc | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------- 3 files changed, 125 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index f4c006b..5578ffa 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ dbus-glue.h *.zip *.bak *.[0-9] +vgcore.* diff --git a/src/core/calls.cc b/src/core/calls.cc index 79394b3..34426fb 100644 --- a/src/core/calls.cc +++ b/src/core/calls.cc @@ -50,7 +50,7 @@ { try { - getSession().connect((const char *) uri, false); + getSession().connect((const char *) uri, (wait != 0)); if(wait) return hllapi_wait_for_ready(wait); @@ -278,51 +278,81 @@ return *datadir; } - /* + HLLAPI_API_CALL hllapi_wait(WORD seconds) { - HLLAPI_API_CALL hllapi_wait(WORD seconds) - { - if(!hllapi_is_connected()) - return HLLAPI_STATUS_DISCONNECTED; + try { - session::get_default()->wait(seconds); + TN3270::Host &host = getSession(); - return hllapi_get_state(); - } + if(!host.isConnected()) + return HLLAPI_STATUS_DISCONNECTED; - HLLAPI_API_CALL hllapi_cmp_text_at(WORD row, WORD col, LPSTR text) - { + host.wait(seconds); - if(!hllapi_is_connected()) - return HLLAPI_STATUS_DISCONNECTED; + return hllapi_get_state(); - int rc = HLLAPI_STATUS_SYSTEM_ERROR; + } catch(std::exception &e) { + + hllapi_lasterror = e.what(); - try - { - rc = session::get_default()->cmp_string_at(row,col,text); - } - catch(std::exception &e) - { - return HLLAPI_STATUS_SYSTEM_ERROR; } - return rc; + return HLLAPI_STATUS_SYSTEM_ERROR; + } - HLLAPI_API_CALL hllapi_find_text(LPSTR text) - { - if(!hllapi_is_connected()) - return HLLAPI_STATUS_DISCONNECTED; + HLLAPI_API_CALL hllapi_cmp_text_at(WORD row, WORD col, LPSTR text) { - return (int) session::get_default()->find_string((const char *) text, false); - } + try { + TN3270::Host &host = getSession(); + + if(!host.isConnected()) + return HLLAPI_STATUS_DISCONNECTED; + + string contents = host.toString(row, col, strlen(text), 0); + + return strncmp(contents.c_str(),text,strlen(text)); + + } catch(std::exception &e) { + + hllapi_lasterror = e.what(); + + } + + return HLLAPI_STATUS_SYSTEM_ERROR; - void hllapi_free(void *p) - { - free(p); } + HLLAPI_API_CALL hllapi_find_text(LPSTR text) { + + try { + + TN3270::Host &host = getSession(); + + if(!host.isConnected()) { + hllapi_lasterror = "Not connected"; + return -1; + } + + string contents = host.toString(0,-1,0); + + size_t pos = contents.find(text); + + if(pos == string::npos) { + hllapi_lasterror = "Not found"; + return -1; + } + + return pos; + + } catch(std::exception &e) { + + hllapi_lasterror = e.what(); + + } + + return -1; + + } -*/ diff --git a/src/testprogram/testprogram.cc b/src/testprogram/testprogram.cc index 33ca851..33072c8 100644 --- a/src/testprogram/testprogram.cc +++ b/src/testprogram/testprogram.cc @@ -40,6 +40,8 @@ int main(int argc, char **argv) { + char buffer[SCREEN_LENGTH+1]; + const char *host = ""; const char *session = ""; // "pw3270:A"; @@ -77,14 +79,64 @@ return rc; } - cout << "TN3270 library revision is " << ((int) hllapi_get_revision()) << endl; + cout << "TN3270 library revision is " << ((int) hllapi_get_revision()) << endl << ">"; - rc = hllapi_connect(host,1); - if(rc) { - cout << "hllapi_connect returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl; - return rc; + cout.flush(); + + string cmdline; + while(std::getline(std::cin, cmdline)) { + + if(cmdline.empty()) + break; + + memset(buffer,' ',SCREEN_LENGTH); + buffer[SCREEN_LENGTH] = 0; + + if(strcasecmp(cmdline.c_str(),"connect") == 0) { + + cout << "Connecting..." << endl; + rc = hllapi_connect(host,1); + cout << "hllapi_connect returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl; + + } else if(strcasecmp(cmdline.c_str(),"wait") == 0) { + + rc = hllapi_wait_for_ready(10); + cout << "hllapi_wait_for_ready returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl; + + } else if(strcasecmp(cmdline.c_str(),"disconnect") == 0) { + + cout << "Disconnecting..." << endl; + rc = hllapi_disconnect(); + cout << "hllapi_disconnect returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl; + + } else if(strcasecmp(cmdline.c_str(),"luname") == 0) { + + rc = hllapi_get_lu_name(buffer,SCREEN_LENGTH); + if(rc == HLLAPI_STATUS_SUCCESS) { + cout << "LU Name is " << buffer << endl; + } else { + cout << "hllapi_get_lu_name returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl; + } + + } else if(strcasecmp(cmdline.c_str(),"contents") == 0) { + + rc = hllapi_get_screen(0,buffer,SCREEN_LENGTH); + cout << "hllapi_get_screen returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl + << buffer << endl << endl; + + } else { + + cout << "Unknown command" << endl; + } + + + cout << endl << ">"; + cout.flush(); } + /* + + rc = hllapi_wait_for_ready(10); if(rc) { cout << "hllapi_wait_for_ready returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl; @@ -95,7 +147,6 @@ cout << "Host is connected" << endl; - char buffer[SCREEN_LENGTH+1]; memset(buffer,' ',SCREEN_LENGTH); buffer[SCREEN_LENGTH] = 0; @@ -113,6 +164,11 @@ } + rc = hllapi_get_lu_name(buffer,SCREEN_LENGTH); + if(rc == HLLAPI_STATUS_SUCCESS) { + cout << "LU Name is " << buffer << endl; + } + rc = hllapi_disconnect(); if(rc) { cout << "hllapi_disconnect returns with rc=" << rc << " (" << hllapi_get_last_error() << ")" << endl; @@ -121,19 +177,6 @@ cout << "HLLAPI Last error was \"" << hllapi_get_last_error() << "\"" << endl; - /* - printf("Library revision is %d\n",(int) hllapi_get_revision()); - - if(host) { - - printf("connect=%d\n",(int) hllapi_connect((char *) host,1)); - printf("wait_for_ready=%d\n",(int) hllapi_wait_for_ready(10)); - printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No"); - - printf("disconnect=%d\n",(int) hllapi_disconnect()); - } - - printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No"); */ rc = hllapi_deinit(); -- libgit2 0.21.2