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,36 +278,59 @@ | ||
278 | return lib3270_wait_for_ready(hSession,60); | 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 | else | 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 | return rc; | 334 | return rc; |
312 | } | 335 | } |
313 | 336 |