Commit 68b91b26e14366bb9bca6e61e78eecbeb78a6645
1 parent
63b4fa60
Exists in
master
and in
5 other branches
Implementando captura HLLAPI
Showing
1 changed file
with
43 additions
and
20 deletions
Show diff stats
src/plugins/remotectl/remotectl.c
| ... | ... | @@ -278,36 +278,59 @@ |
| 278 | 278 | return lib3270_wait_for_ready(hSession,60); |
| 279 | 279 | } |
| 280 | 280 | |
| 281 | - static int cmd_copypstostr(H3270 *hSession, unsigned short pos, char *buffer, unsigned short length) | |
| 281 | + static int cmd_copypstostr(H3270 *hSession, unsigned short pos, char *outBuff, unsigned short length) | |
| 282 | 282 | { |
| 283 | - char * text = lib3270_get_text(hSession, (int) pos, (int) length); | |
| 284 | - gchar * local; | |
| 285 | - GError * error = NULL; | |
| 286 | - gsize bytes_read; | |
| 287 | - gsize bytes_written; | |
| 288 | - int rc = 0; | |
| 289 | - const gchar * charset; | |
| 283 | + int rows; | |
| 284 | + int cols; | |
| 285 | + unsigned short * attr; | |
| 286 | + unsigned char * text; | |
| 287 | + int rc; | |
| 290 | 288 | |
| 291 | - if(!text) | |
| 292 | - return -1; | |
| 289 | + lib3270_get_screen_size(hSession,&rows,&cols); | |
| 293 | 290 | |
| 294 | - g_get_charset(&charset); | |
| 291 | + if(pos < 1 || (pos+length) >= (rows*cols)) | |
| 292 | + return EINVAL; | |
| 293 | + | |
| 294 | + pos--; | |
| 295 | 295 | |
| 296 | - local = g_convert((const gchar *) text,-1,charset,lib3270_get_charset(hSession),&bytes_read,&bytes_written,&error); | |
| 296 | + attr = g_new0(unsigned short, length+0); | |
| 297 | + text = g_new0(unsigned char, length+1); | |
| 297 | 298 | |
| 298 | - if(local) | |
| 299 | + rc = lib3270_get_contents(hSession,pos,pos+(length-1),text,attr); | |
| 300 | + | |
| 301 | + if(rc) | |
| 299 | 302 | { |
| 300 | - strncpy(buffer,local,length); | |
| 301 | - g_free(local); | |
| 303 | + strncpy(outBuff,strerror(rc),length); | |
| 302 | 304 | } |
| 303 | 305 | else |
| 304 | 306 | { |
| 305 | - strncpy(buffer,error->message,length); | |
| 306 | - rc = error->code; | |
| 307 | - g_error_free(error); | |
| 308 | - } | |
| 307 | + const gchar * charset; | |
| 308 | + gchar * local; | |
| 309 | + gsize bytes_read; | |
| 310 | + gsize bytes_written; | |
| 311 | + GError * error = NULL; | |
| 309 | 312 | |
| 310 | - lib3270_free(text); | |
| 313 | + trace("Text: [%s]",text); | |
| 314 | + | |
| 315 | + g_get_charset(&charset); | |
| 316 | + | |
| 317 | + local = g_convert((const gchar *) text,length,charset,lib3270_get_charset(hSession),&bytes_read,&bytes_written,&error); | |
| 318 | + | |
| 319 | + g_free(attr); | |
| 320 | + g_free(text); | |
| 321 | + | |
| 322 | + if(!local) | |
| 323 | + { | |
| 324 | + rc = error->code; | |
| 325 | + strncpy(outBuff,error->message,length); | |
| 326 | + g_error_free(error); | |
| 327 | + } | |
| 328 | + else | |
| 329 | + { | |
| 330 | + strncpy(outBuff,(const char *) local,length); | |
| 331 | + g_free(local); | |
| 332 | + } | |
| 333 | + } | |
| 311 | 334 | return rc; |
| 312 | 335 | } |
| 313 | 336 | ... | ... |