Commit aeb92025d39ef0c1c73ee8848490afbc4e037f5c
1 parent
546a3f95
Exists in
master
and in
3 other branches
Implementando seleção por campo/palavra direto na biblioteca.
Showing
5 changed files
with
72 additions
and
21 deletions
Show diff stats
... | ... | @@ -383,7 +383,8 @@ |
383 | 383 | const char *description; |
384 | 384 | }; |
385 | 385 | |
386 | - LOCAL_EXTERN int Register3270ScreenCallbacks(const struct lib3270_screen_callbacks *cbk); | |
386 | + // LOCAL_EXTERN int Register3270ScreenCallbacks(const struct lib3270_screen_callbacks *cbk); | |
387 | + LOCAL_EXTERN void ring_bell(void); | |
387 | 388 | |
388 | 389 | #define new_3270_session(m) lib3270_session_new(m) |
389 | 390 | |
... | ... | @@ -395,8 +396,23 @@ |
395 | 396 | LOCAL_EXTERN void show_3270_popup_dialog(H3270 *session, PW3270_DIALOG type, const char *title, const char *msg, const char *fmt, ...); |
396 | 397 | |
397 | 398 | /* Set/Get screen contents */ |
398 | - LOCAL_EXTERN int find_field_attribute(H3270 *session, int baddr); | |
399 | - LOCAL_EXTERN int find_field_length(H3270 *session, int baddr); | |
399 | + #define find_field_attribute(s,a) lib3270_field_addr(s,a) | |
400 | + #define find_field_length(s,a) find_field_length(s,a) | |
401 | + | |
402 | + /** | |
403 | + * Find the buffer address of the field attribute for a given buffer address. | |
404 | + * | |
405 | + * @param h Session handle. | |
406 | + * @param addr Buffer address of the field. | |
407 | + * | |
408 | + * @return field address or -1 if the screen isn't formatted. | |
409 | + * | |
410 | + */ | |
411 | + LIB3270_EXPORT int lib3270_field_addr(H3270 *h, int baddr); | |
412 | + | |
413 | + LIB3270_EXPORT int lib3270_field_length(H3270 *session, int baddr); | |
414 | + | |
415 | + | |
400 | 416 | LOCAL_EXTERN unsigned char get_field_attribute(H3270 *session, int baddr); |
401 | 417 | LOCAL_EXTERN int screen_read(char *dest, int baddr, int count); |
402 | 418 | LOCAL_EXTERN void Input_String(const unsigned char *str); | ... | ... |
ctlr.c
... | ... | @@ -320,11 +320,7 @@ static void ctlr_connect(H3270 *session, int ignored unused, void *dunno) |
320 | 320 | |
321 | 321 | |
322 | 322 | |
323 | -/* | |
324 | - * Find the buffer address of the field attribute for a given buffer address. | |
325 | - * Returns -1 if the screen isn't formatted. | |
326 | - */ | |
327 | -int find_field_attribute(H3270 *h, int baddr) | |
323 | +LIB3270_EXPORT int lib3270_field_addr(H3270 *h, int baddr) | |
328 | 324 | { |
329 | 325 | int sbaddr; |
330 | 326 | |
... | ... | @@ -334,18 +330,20 @@ int find_field_attribute(H3270 *h, int baddr) |
334 | 330 | return -1; |
335 | 331 | |
336 | 332 | sbaddr = baddr; |
337 | - do { | |
333 | + do | |
334 | + { | |
338 | 335 | if (ea_buf[baddr].fa) |
339 | 336 | return baddr; |
340 | 337 | DEC_BA(baddr); |
341 | 338 | } while (baddr != sbaddr); |
339 | + | |
342 | 340 | return -1; |
343 | 341 | } |
344 | 342 | |
345 | 343 | /* |
346 | 344 | * Get Field width |
347 | 345 | */ |
348 | -int find_field_length(H3270 *h, int baddr) | |
346 | +int lib3270_field_length(H3270 *h, int baddr) | |
349 | 347 | { |
350 | 348 | int saddr; |
351 | 349 | int addr; | ... | ... |
lib3270.cbp
... | ... | @@ -7,8 +7,8 @@ |
7 | 7 | <Option compiler="gcc" /> |
8 | 8 | <Build> |
9 | 9 | <Target title="Debug"> |
10 | - <Option output=".bin/Debug/lib3270" prefix_auto="1" extension_auto="1" /> | |
11 | - <Option object_output=".obj/Debug/" /> | |
10 | + <Option output=".bin\Debug\lib3270" prefix_auto="1" extension_auto="1" /> | |
11 | + <Option object_output=".obj\Debug\" /> | |
12 | 12 | <Option type="1" /> |
13 | 13 | <Option compiler="gcc" /> |
14 | 14 | <Option use_console_runner="0" /> |
... | ... | @@ -21,8 +21,8 @@ |
21 | 21 | </Linker> |
22 | 22 | </Target> |
23 | 23 | <Target title="Release"> |
24 | - <Option output=".bin/Release/lib3270" prefix_auto="1" extension_auto="1" /> | |
25 | - <Option object_output=".obj/Release/" /> | |
24 | + <Option output=".bin\Release\lib3270" prefix_auto="1" extension_auto="1" /> | |
25 | + <Option object_output=".obj\Release\" /> | |
26 | 26 | <Option type="3" /> |
27 | 27 | <Option compiler="gcc" /> |
28 | 28 | <Option createDefFile="1" /> |
... | ... | @@ -35,8 +35,8 @@ |
35 | 35 | </Linker> |
36 | 36 | </Target> |
37 | 37 | <Target title="testprogram"> |
38 | - <Option output=".bin/Debug/lib3270" prefix_auto="1" extension_auto="1" /> | |
39 | - <Option object_output=".obj/testprogram/" /> | |
38 | + <Option output=".bin\Debug\lib3270" prefix_auto="1" extension_auto="1" /> | |
39 | + <Option object_output=".obj\testprogram\" /> | |
40 | 40 | <Option type="1" /> |
41 | 41 | <Option compiler="gcc" /> |
42 | 42 | <Option use_console_runner="0" /> |
... | ... | @@ -53,10 +53,12 @@ |
53 | 53 | <Add option="-Wmissing-declarations" /> |
54 | 54 | <Add option="-Wall" /> |
55 | 55 | <Add option="-DLIB3270=1" /> |
56 | - <Add directory="../include" /> | |
57 | - <Add directory="../include/lib3270" /> | |
56 | + <Add directory="..\include" /> | |
57 | + <Add directory="..\include\lib3270" /> | |
58 | 58 | </Compiler> |
59 | - <Unit filename="../include/lib3270/config.h.in" /> | |
59 | + <Unit filename="..\include\lib3270.h" /> | |
60 | + <Unit filename="..\include\lib3270\config.h.in" /> | |
61 | + <Unit filename="..\include\lib3270\selection.h" /> | |
60 | 62 | <Unit filename="3270ds.h" /> |
61 | 63 | <Unit filename="Makefile.in" /> |
62 | 64 | <Unit filename="X11keysym.h" /> | ... | ... |
screenc.h
... | ... | @@ -27,7 +27,6 @@ |
27 | 27 | #define screen_80() /* */ |
28 | 28 | |
29 | 29 | |
30 | -LIB3270_INTERNAL void ring_bell(void); | |
31 | 30 | LIB3270_INTERNAL void screen_erase(H3270 *session); |
32 | 31 | LIB3270_INTERNAL void screen_changed(H3270 *session, int bstart, int bend); |
33 | 32 | LIB3270_INTERNAL int screen_init(H3270 *session); | ... | ... |
selection.c
... | ... | @@ -178,7 +178,6 @@ LIB3270_EXPORT void lib3270_clear_selection(H3270 *session) |
178 | 178 | |
179 | 179 | } |
180 | 180 | |
181 | - | |
182 | 181 | LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr) |
183 | 182 | { |
184 | 183 | CHECK_SESSION_HANDLE(session); |
... | ... | @@ -195,3 +194,40 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr) |
195 | 194 | |
196 | 195 | } |
197 | 196 | |
197 | +LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr) | |
198 | +{ | |
199 | + int pos, len; | |
200 | + | |
201 | + CHECK_SESSION_HANDLE(session); | |
202 | + | |
203 | + for(pos = baddr; pos > 0 && !isspace(ea_buf[pos].chr);pos--); | |
204 | + session->selected.begin = pos; | |
205 | + | |
206 | + len = session->rows * session->cols; | |
207 | + for(pos = baddr; pos < len && !isspace(ea_buf[pos].chr);pos++); | |
208 | + session->selected.end = pos; | |
209 | + | |
210 | + update_selected_region(session); | |
211 | +} | |
212 | + | |
213 | +LIB3270_EXPORT int lib3270_select_field(H3270 *session, int baddr) | |
214 | +{ | |
215 | + int start; | |
216 | + | |
217 | + CHECK_SESSION_HANDLE(session); | |
218 | + | |
219 | + start = lib3270_field_addr(session,baddr); | |
220 | + | |
221 | + if(start < 0) | |
222 | + { | |
223 | + ring_bell(); | |
224 | + return -1; | |
225 | + } | |
226 | + | |
227 | + session->selected.begin = start; | |
228 | + session->selected.end = start + lib3270_field_length(session,start); | |
229 | + | |
230 | + update_selected_region(session); | |
231 | + | |
232 | + return 0; | |
233 | +} | ... | ... |