Commit bfa31c773b95d64b00bd0ba970bd438b237363a2
1 parent
e6624bf6
Exists in
master
and in
5 other branches
Implementando conversão do buffer de terminal para HTML
Showing
23 changed files
with
555 additions
and
411 deletions
Show diff stats
src/include/lib3270.h
... | ... | @@ -103,11 +103,11 @@ |
103 | 103 | LIB3270_TOGGLE_CONNECT_ON_STARTUP, |
104 | 104 | LIB3270_TOGGLE_KP_ALTERNATIVE, /**< Keypad +/- move to next/previous field */ |
105 | 105 | LIB3270_TOGGLE_BEEP, /**< Beep on errors */ |
106 | + LIB3270_TOGGLE_VIEW_FIELD, /**< View Field attribute */ | |
106 | 107 | |
107 | 108 | // LIB3270_TOGGLE_ALT_CURSOR, |
108 | 109 | // LIB3270_TOGGLE_AID_WAIT, |
109 | 110 | // LIB3270_TOGGLE_SCROLL_BAR, |
110 | -// LIB3270_TOGGLE_VISIBLE_CONTROL, | |
111 | 111 | // LIB3270_TOGGLE_KEYPAD, |
112 | 112 | |
113 | 113 | LIB3270_TOGGLE_COUNT |
... | ... | @@ -716,11 +716,13 @@ |
716 | 716 | * @param offset Start position. |
717 | 717 | * @param len Text length or -1 to all text. |
718 | 718 | * |
719 | - * @return Contents at position if available, or NULL. Release it with free() | |
719 | + * @return Contents at position if available, or NULL. Release it with lib3270_free() | |
720 | 720 | * |
721 | 721 | */ |
722 | 722 | LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len); |
723 | 723 | |
724 | + LIB3270_EXPORT char * lib3270_get_field_at(H3270 *session, int baddr); | |
725 | + | |
724 | 726 | /** |
725 | 727 | * Get a terminal character and attribute. |
726 | 728 | * | ... | ... |
... | ... | @@ -0,0 +1,333 @@ |
1 | +/* | |
2 | + * Modifications Copyright 1993, 1994, 1995, 1999, 2000, 2002, 2003, 2004, | |
3 | + * 2005 by Paul Mattes. | |
4 | + * RPQNAMES modifications Copyright 2004 by Don Russell. | |
5 | + * Original X11 Port Copyright 1990 by Jeff Sparkes. | |
6 | + * Permission to use, copy, modify, and distribute this software and its | |
7 | + * documentation for any purpose and without fee is hereby granted, | |
8 | + * provided that the above copyright notice appear in all copies and that | |
9 | + * both that copyright notice and this permission notice appear in | |
10 | + * supporting documentation. | |
11 | + * | |
12 | + * Copyright 1989 by Georgia Tech Research Corporation, Atlanta, GA 30332. | |
13 | + * All Rights Reserved. GTRC hereby grants public use of this software. | |
14 | + * Derivative works based on this software must incorporate this copyright | |
15 | + * notice. | |
16 | + * | |
17 | + * x3270, c3270, s3270, tcl3270 and pr3287 are distributed in the hope that | |
18 | + * they will be useful, but WITHOUT ANY WARRANTY; without even the implied | |
19 | + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 | + * file LICENSE for more details. | |
21 | + */ | |
22 | + | |
23 | +/* | |
24 | + * 3270ds.h | |
25 | + * | |
26 | + * Header file for the 3270 Data Stream Protocol. | |
27 | + */ | |
28 | + | |
29 | +/* 3270 commands */ | |
30 | +#define CMD_W 0x01 /* write */ | |
31 | +#define CMD_RB 0x02 /* read buffer */ | |
32 | +#define CMD_NOP 0x03 /* no-op */ | |
33 | +#define CMD_EW 0x05 /* erase/write */ | |
34 | +#define CMD_RM 0x06 /* read modified */ | |
35 | +#define CMD_EWA 0x0d /* erase/write alternate */ | |
36 | +#define CMD_RMA 0x0e /* read modified all */ | |
37 | +#define CMD_EAU 0x0f /* erase all unprotected */ | |
38 | +#define CMD_WSF 0x11 /* write structured field */ | |
39 | + | |
40 | +/* SNA 3270 commands */ | |
41 | +#define SNA_CMD_RMA 0x6e /* read modified all */ | |
42 | +#define SNA_CMD_EAU 0x6f /* erase all unprotected */ | |
43 | +#define SNA_CMD_EWA 0x7e /* erase/write alternate */ | |
44 | +#define SNA_CMD_W 0xf1 /* write */ | |
45 | +#define SNA_CMD_RB 0xf2 /* read buffer */ | |
46 | +#define SNA_CMD_WSF 0xf3 /* write structured field */ | |
47 | +#define SNA_CMD_EW 0xf5 /* erase/write */ | |
48 | +#define SNA_CMD_RM 0xf6 /* read modified */ | |
49 | + | |
50 | +/* 3270 orders */ | |
51 | +#define ORDER_PT 0x05 /* program tab */ | |
52 | +#define ORDER_GE 0x08 /* graphic escape */ | |
53 | +#define ORDER_SBA 0x11 /* set buffer address */ | |
54 | +#define ORDER_EUA 0x12 /* erase unprotected to address */ | |
55 | +#define ORDER_IC 0x13 /* insert cursor */ | |
56 | +#define ORDER_SF 0x1d /* start field */ | |
57 | +#define ORDER_SA 0x28 /* set attribute */ | |
58 | +#define ORDER_SFE 0x29 /* start field extended */ | |
59 | +#define ORDER_YALE 0x2b /* Yale sub command */ | |
60 | +#define ORDER_MF 0x2c /* modify field */ | |
61 | +#define ORDER_RA 0x3c /* repeat to address */ | |
62 | + | |
63 | +#define FCORDER_NULL 0x00 /* format control: null */ | |
64 | +#define FCORDER_FF 0x0c /* form feed */ | |
65 | +#define FCORDER_CR 0x0d /* carriage return */ | |
66 | +#define FCORDER_SO 0x0e /* shift out (DBCS subfield) */ | |
67 | +#define FCORDER_SI 0x0f /* shift in (DBCS end) */ | |
68 | +#define FCORDER_NL 0x15 /* new line */ | |
69 | +#define FCORDER_EM 0x19 /* end of medium */ | |
70 | +#define FCORDER_DUP 0x1c /* duplicate */ | |
71 | +#define FCORDER_FM 0x1e /* field mark */ | |
72 | +#define FCORDER_SUB 0x3f /* substitute */ | |
73 | +#define FCORDER_EO 0xff /* eight ones */ | |
74 | + | |
75 | +/* SCS control code, some overlap orders */ | |
76 | +#define SCS_BS 0x16 /* Back Space */ | |
77 | +#define SCS_BEL 0x2f /* Bell Function */ | |
78 | +#define SCS_CR 0x0d /* Carriage Return */ | |
79 | +#define SCS_ENP 0x14 /* Enable Presentation */ | |
80 | +#define SCS_FF 0x0c /* Forms Feed */ | |
81 | +#define SCS_GE 0x08 /* Graphic Escape */ | |
82 | +#define SCS_HT 0x05 /* Horizontal Tab */ | |
83 | +#define SCS_INP 0x24 /* Inhibit Presentation */ | |
84 | +#define SCS_IRS 0x1e /* Interchange-Record Separator */ | |
85 | +#define SCS_LF 0x25 /* Line Feed */ | |
86 | +#define SCS_NL 0x15 /* New Line */ | |
87 | +#define SCS_SA 0x28 /* Set Attribute: */ | |
88 | +#define SCS_SA_RESET 0x00 /* Reset all */ | |
89 | +#define SCS_SA_HIGHLIGHT 0x41 /* Highlighting */ | |
90 | +#define SCS_SA_CS 0x42 /* Character set */ | |
91 | +#define SCS_SA_GRID 0xc2 /* Grid */ | |
92 | +#define SCS_SET 0x2b /* Set: */ | |
93 | +#define SCS_SHF 0xc1 /* Horizontal format */ | |
94 | +#define SCS_SLD 0xc6 /* Line Density */ | |
95 | +#define SCS_SVF 0xc2 /* Vertical Format */ | |
96 | +#define SCS_SO 0x0e /* Shift out (DBCS subfield start) */ | |
97 | +#define SCS_SI 0x0f /* Shift in (DBCS subfield end) */ | |
98 | +#define SCS_TRN 0x35 /* Transparent */ | |
99 | +#define SCS_VCS 0x04 /* Vertical Channel Select */ | |
100 | +#define SCS_VT 0x0b /* Vertical Tab */ | |
101 | + | |
102 | +/* Structured fields */ | |
103 | +#define SF_READ_PART 0x01 /* read partition */ | |
104 | +#define SF_RP_QUERY 0x02 /* query */ | |
105 | +#define SF_RP_QLIST 0x03 /* query list */ | |
106 | +#define SF_RPQ_LIST 0x00 /* QCODE list */ | |
107 | +#define SF_RPQ_EQUIV 0x40 /* equivalent+ QCODE list */ | |
108 | +#define SF_RPQ_ALL 0x80 /* all */ | |
109 | +#define SF_ERASE_RESET 0x03 /* erase/reset */ | |
110 | +#define SF_ER_DEFAULT 0x00 /* default */ | |
111 | +#define SF_ER_ALT 0x80 /* alternate */ | |
112 | +#define SF_SET_REPLY_MODE 0x09 /* set reply mode */ | |
113 | +#define SF_SRM_FIELD 0x00 /* field */ | |
114 | +#define SF_SRM_XFIELD 0x01 /* extended field */ | |
115 | +#define SF_SRM_CHAR 0x02 /* character */ | |
116 | +#define SF_CREATE_PART 0x0c /* create partition */ | |
117 | +#define CPFLAG_PROT 0x40 /* protected flag */ | |
118 | +#define CPFLAG_COPY_PS 0x20 /* local copy to presentation space */ | |
119 | +#define CPFLAG_BASE 0x07 /* base character set index */ | |
120 | +#define SF_OUTBOUND_DS 0x40 /* outbound 3270 DS */ | |
121 | +#define SF_TRANSFER_DATA 0xd0 /* file transfer open request */ | |
122 | + | |
123 | +/* Query replies */ | |
124 | +#define QR_SUMMARY 0x80 /* summary */ | |
125 | +#define QR_USABLE_AREA 0x81 /* usable area */ | |
126 | +#define QR_ALPHA_PART 0x84 /* alphanumeric partitions */ | |
127 | +#define QR_CHARSETS 0x85 /* character sets */ | |
128 | +#define QR_COLOR 0x86 /* color */ | |
129 | +#define QR_HIGHLIGHTING 0x87 /* highlighting */ | |
130 | +#define QR_REPLY_MODES 0x88 /* reply modes */ | |
131 | +#define QR_DBCS_ASIA 0x91 /* DBCS-Asia */ | |
132 | +#define QR_PC3270 0x93 /* PC3270 */ | |
133 | +#define QR_DDM 0x95 /* distributed data management */ | |
134 | +#define QR_RPQNAMES 0xa1 /* RPQ names */ | |
135 | +#define QR_IMP_PART 0xa6 /* implicit partition */ | |
136 | +#define QR_NULL 0xff /* null */ | |
137 | + | |
138 | +#define BA_TO_ROW(ba) ((ba) / h3270.cols) | |
139 | +#define BA_TO_COL(ba) ((ba) % h3270.cols) | |
140 | +#define ROWCOL_TO_BA(r,c) (((r) * h3270.cols) + c) | |
141 | +#define INC_BA(ba) { (ba) = ((ba) + 1) % (h3270.cols * h3270.rows); } | |
142 | +#define DEC_BA(ba) { (ba) = (ba) ? (ba - 1) : ((h3270.cols*h3270.rows) - 1); } | |
143 | + | |
144 | +/** Field attributes. */ | |
145 | +#define FA_PRINTABLE 0xc0 /**< these make the character "printable" */ | |
146 | +#define FA_PROTECT 0x20 /**< unprotected (0) / protected (1) */ | |
147 | +#define FA_NUMERIC 0x10 /**< alphanumeric (0) /numeric (1) */ | |
148 | +#define FA_INTENSITY 0x0c /**< display/selector pen detectable: */ | |
149 | +#define FA_INT_NORM_NSEL 0x00 /**< 00 normal, non-detect */ | |
150 | +#define FA_INT_NORM_SEL 0x04 /**< 01 normal, detectable */ | |
151 | +#define FA_INT_HIGH_SEL 0x08 /**< 10 intensified, detectable */ | |
152 | +#define FA_INT_ZERO_NSEL 0x0c /**< 11 nondisplay, non-detect */ | |
153 | +#define FA_RESERVED 0x02 /**< must be 0 */ | |
154 | +#define FA_MODIFY 0x01 /**< modified (1) */ | |
155 | + | |
156 | +/* Bits in the field attribute that are stored. */ | |
157 | +#define FA_MASK (FA_PROTECT | FA_NUMERIC | FA_INTENSITY | FA_MODIFY) | |
158 | + | |
159 | +/* Tests for various attribute properties. */ | |
160 | +#define FA_IS_MODIFIED(c) ((c) & FA_MODIFY) | |
161 | +#define FA_IS_NUMERIC(c) ((c) & FA_NUMERIC) | |
162 | +#define FA_IS_PROTECTED(c) ((c) & FA_PROTECT) | |
163 | +#define FA_IS_SKIP(c) (((c) & FA_PROTECT) && ((c) & FA_NUMERIC)) | |
164 | + | |
165 | +#define FA_IS_ZERO(c) \ | |
166 | + (((c) & FA_INTENSITY) == FA_INT_ZERO_NSEL) | |
167 | +#define FA_IS_HIGH(c) \ | |
168 | + (((c) & FA_INTENSITY) == FA_INT_HIGH_SEL) | |
169 | +#define FA_IS_NORMAL(c) \ | |
170 | + ( \ | |
171 | + ((c) & FA_INTENSITY) == FA_INT_NORM_NSEL \ | |
172 | + || \ | |
173 | + ((c) & FA_INTENSITY) == FA_INT_NORM_SEL \ | |
174 | + ) | |
175 | +#define FA_IS_SELECTABLE(c) \ | |
176 | + ( \ | |
177 | + ((c) & FA_INTENSITY) == FA_INT_NORM_SEL \ | |
178 | + || \ | |
179 | + ((c) & FA_INTENSITY) == FA_INT_HIGH_SEL \ | |
180 | + ) | |
181 | +#define FA_IS_INTENSE(c) \ | |
182 | + ((c & FA_INT_HIGH_SEL) == FA_INT_HIGH_SEL) | |
183 | + | |
184 | +/* Extended attributes */ | |
185 | +#define XA_ALL 0x00 | |
186 | +#define XA_3270 0xc0 | |
187 | +#define XA_VALIDATION 0xc1 | |
188 | +#define XAV_FILL 0x04 | |
189 | +#define XAV_ENTRY 0x02 | |
190 | +#define XAV_TRIGGER 0x01 | |
191 | +#define XA_OUTLINING 0xc2 | |
192 | +#define XAO_UNDERLINE 0x01 | |
193 | +#define XAO_RIGHT 0x02 | |
194 | +#define XAO_OVERLINE 0x04 | |
195 | +#define XAO_LEFT 0x08 | |
196 | +#define XA_HIGHLIGHTING 0x41 | |
197 | +#define XAH_DEFAULT 0x00 | |
198 | +#define XAH_NORMAL 0xf0 | |
199 | +#define XAH_BLINK 0xf1 | |
200 | +#define XAH_REVERSE 0xf2 | |
201 | +#define XAH_UNDERSCORE 0xf4 | |
202 | +#define XAH_INTENSIFY 0xf8 | |
203 | +#define XA_FOREGROUND 0x42 | |
204 | +#define XAC_DEFAULT 0x00 | |
205 | +#define XA_CHARSET 0x43 | |
206 | +#define XA_BACKGROUND 0x45 | |
207 | +#define XA_TRANSPARENCY 0x46 | |
208 | +#define XAT_DEFAULT 0x00 | |
209 | +#define XAT_OR 0xf0 | |
210 | +#define XAT_XOR 0xf1 | |
211 | +#define XAT_OPAQUE 0xff | |
212 | +#define XA_INPUT_CONTROL 0xfe | |
213 | +#define XAI_DISABLED 0x00 | |
214 | +#define XAI_ENABLED 0x01 | |
215 | + | |
216 | +/* WCC definitions */ | |
217 | +#define WCC_RESET(c) ((c) & 0x40) | |
218 | +#define WCC_START_PRINTER(c) ((c) & 0x08) | |
219 | +#define WCC_SOUND_ALARM(c) ((c) & 0x04) | |
220 | +#define WCC_KEYBOARD_RESTORE(c) ((c) & 0x02) | |
221 | +#define WCC_RESET_MDT(c) ((c) & 0x01) | |
222 | + | |
223 | +/* AIDs */ | |
224 | +#define AID_NO 0x60 /* no AID generated */ | |
225 | +#define AID_QREPLY 0x61 | |
226 | +#define AID_ENTER 0x7d | |
227 | +#define AID_PF1 0xf1 | |
228 | +#define AID_PF2 0xf2 | |
229 | +#define AID_PF3 0xf3 | |
230 | +#define AID_PF4 0xf4 | |
231 | +#define AID_PF5 0xf5 | |
232 | +#define AID_PF6 0xf6 | |
233 | +#define AID_PF7 0xf7 | |
234 | +#define AID_PF8 0xf8 | |
235 | +#define AID_PF9 0xf9 | |
236 | +#define AID_PF10 0x7a | |
237 | +#define AID_PF11 0x7b | |
238 | +#define AID_PF12 0x7c | |
239 | +#define AID_PF13 0xc1 | |
240 | +#define AID_PF14 0xc2 | |
241 | +#define AID_PF15 0xc3 | |
242 | +#define AID_PF16 0xc4 | |
243 | +#define AID_PF17 0xc5 | |
244 | +#define AID_PF18 0xc6 | |
245 | +#define AID_PF19 0xc7 | |
246 | +#define AID_PF20 0xc8 | |
247 | +#define AID_PF21 0xc9 | |
248 | +#define AID_PF22 0x4a | |
249 | +#define AID_PF23 0x4b | |
250 | +#define AID_PF24 0x4c | |
251 | +#define AID_OICR 0xe6 | |
252 | +#define AID_MSR_MHS 0xe7 | |
253 | +#define AID_SELECT 0x7e | |
254 | +#define AID_PA1 0x6c | |
255 | +#define AID_PA2 0x6e | |
256 | +#define AID_PA3 0x6b | |
257 | +#define AID_CLEAR 0x6d | |
258 | +#define AID_SYSREQ 0xf0 | |
259 | + | |
260 | +#define AID_SF 0x88 | |
261 | +#define SFID_QREPLY 0x81 | |
262 | + | |
263 | +/* Colors */ | |
264 | +#define COLOR_NEUTRAL_BLACK 0 | |
265 | +#define COLOR_BLUE 1 | |
266 | +#define COLOR_RED 2 | |
267 | +#define COLOR_PINK 3 | |
268 | +#define COLOR_GREEN 4 | |
269 | +#define COLOR_TURQUOISE 5 | |
270 | +#define COLOR_YELLOW 6 | |
271 | +#define COLOR_NEUTRAL_WHITE 7 | |
272 | +#define COLOR_BLACK 8 | |
273 | +#define COLOR_DEEP_BLUE 9 | |
274 | +#define COLOR_ORANGE 10 | |
275 | +#define COLOR_PURPLE 11 | |
276 | +#define COLOR_PALE_GREEN 12 | |
277 | +#define COLOR_PALE_TURQUOISE 13 | |
278 | +#define COLOR_GREY 14 | |
279 | +#define COLOR_WHITE 15 | |
280 | + | |
281 | +/* Data stream manipulation macros. */ | |
282 | +#define MASK32 0xff000000U | |
283 | +#define MASK24 0x00ff0000U | |
284 | +#define MASK16 0x0000ff00U | |
285 | +#define MASK08 0x000000ffU | |
286 | +#define MINUS1 0xffffffffU | |
287 | + | |
288 | +#define SET16(ptr, val) { \ | |
289 | + *((ptr)++) = ((val) & MASK16) >> 8; \ | |
290 | + *((ptr)++) = ((val) & MASK08); \ | |
291 | +} | |
292 | +#define GET16(val, ptr) { \ | |
293 | + (val) = *((ptr)+1); \ | |
294 | + (val) += *(ptr) << 8; \ | |
295 | +} | |
296 | +#define SET32(ptr, val) { \ | |
297 | + *((ptr)++) = ((val) & MASK32) >> 24; \ | |
298 | + *((ptr)++) = ((val) & MASK24) >> 16; \ | |
299 | + *((ptr)++) = ((val) & MASK16) >> 8; \ | |
300 | + *((ptr)++) = ((val) & MASK08); \ | |
301 | +} | |
302 | +#define HIGH8(s) (((s) >> 8) & 0xff) | |
303 | +#define LOW8(s) ((s) & 0xff) | |
304 | + | |
305 | +/* Other EBCDIC control codes. */ | |
306 | +#define EBC_null 0x00 | |
307 | +#define EBC_ff 0x0c | |
308 | +#define EBC_cr 0x0d | |
309 | +#define EBC_so 0x0e | |
310 | +#define EBC_si 0x0f | |
311 | +#define EBC_nl 0x15 | |
312 | +#define EBC_em 0x19 | |
313 | +#define EBC_dup 0x1c | |
314 | +#define EBC_fm 0x1e | |
315 | +#define EBC_space 0x40 | |
316 | +#define EBC_nobreakspace 0x41 | |
317 | +#define EBC_period 0x4b | |
318 | +#define EBC_ampersand 0x50 | |
319 | +#define EBC_underscore 0x6d | |
320 | +#define EBC_greater 0x6e | |
321 | +#define EBC_question 0x6f | |
322 | +#define EBC_Yacute 0xad | |
323 | +#define EBC_diaeresis 0xbd | |
324 | +#define EBC_minus 0xca | |
325 | +#define EBC_0 0xf0 | |
326 | +#define EBC_9 0xf9 | |
327 | +#define EBC_eo 0xff | |
328 | + | |
329 | +/* BIND definitions. */ | |
330 | +#define BIND_RU LIB3270_BIND_RU | |
331 | +#define BIND_OFF_PLU_NAME_LEN LIB3270_BIND_OFF_PLU_NAME_LEN | |
332 | +#define BIND_OFF_PLU_NAME LIB3270_BIND_OFF_PLU_NAME | |
333 | +#define BIND_PLU_NAME_MAX LIB3270_BIND_PLU_NAME_MAX | ... | ... |
src/lib3270/3270ds.h
... | ... | @@ -1,333 +0,0 @@ |
1 | -/* | |
2 | - * Modifications Copyright 1993, 1994, 1995, 1999, 2000, 2002, 2003, 2004, | |
3 | - * 2005 by Paul Mattes. | |
4 | - * RPQNAMES modifications Copyright 2004 by Don Russell. | |
5 | - * Original X11 Port Copyright 1990 by Jeff Sparkes. | |
6 | - * Permission to use, copy, modify, and distribute this software and its | |
7 | - * documentation for any purpose and without fee is hereby granted, | |
8 | - * provided that the above copyright notice appear in all copies and that | |
9 | - * both that copyright notice and this permission notice appear in | |
10 | - * supporting documentation. | |
11 | - * | |
12 | - * Copyright 1989 by Georgia Tech Research Corporation, Atlanta, GA 30332. | |
13 | - * All Rights Reserved. GTRC hereby grants public use of this software. | |
14 | - * Derivative works based on this software must incorporate this copyright | |
15 | - * notice. | |
16 | - * | |
17 | - * x3270, c3270, s3270, tcl3270 and pr3287 are distributed in the hope that | |
18 | - * they will be useful, but WITHOUT ANY WARRANTY; without even the implied | |
19 | - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 | - * file LICENSE for more details. | |
21 | - */ | |
22 | - | |
23 | -/* | |
24 | - * 3270ds.h | |
25 | - * | |
26 | - * Header file for the 3270 Data Stream Protocol. | |
27 | - */ | |
28 | - | |
29 | -/* 3270 commands */ | |
30 | -#define CMD_W 0x01 /* write */ | |
31 | -#define CMD_RB 0x02 /* read buffer */ | |
32 | -#define CMD_NOP 0x03 /* no-op */ | |
33 | -#define CMD_EW 0x05 /* erase/write */ | |
34 | -#define CMD_RM 0x06 /* read modified */ | |
35 | -#define CMD_EWA 0x0d /* erase/write alternate */ | |
36 | -#define CMD_RMA 0x0e /* read modified all */ | |
37 | -#define CMD_EAU 0x0f /* erase all unprotected */ | |
38 | -#define CMD_WSF 0x11 /* write structured field */ | |
39 | - | |
40 | -/* SNA 3270 commands */ | |
41 | -#define SNA_CMD_RMA 0x6e /* read modified all */ | |
42 | -#define SNA_CMD_EAU 0x6f /* erase all unprotected */ | |
43 | -#define SNA_CMD_EWA 0x7e /* erase/write alternate */ | |
44 | -#define SNA_CMD_W 0xf1 /* write */ | |
45 | -#define SNA_CMD_RB 0xf2 /* read buffer */ | |
46 | -#define SNA_CMD_WSF 0xf3 /* write structured field */ | |
47 | -#define SNA_CMD_EW 0xf5 /* erase/write */ | |
48 | -#define SNA_CMD_RM 0xf6 /* read modified */ | |
49 | - | |
50 | -/* 3270 orders */ | |
51 | -#define ORDER_PT 0x05 /* program tab */ | |
52 | -#define ORDER_GE 0x08 /* graphic escape */ | |
53 | -#define ORDER_SBA 0x11 /* set buffer address */ | |
54 | -#define ORDER_EUA 0x12 /* erase unprotected to address */ | |
55 | -#define ORDER_IC 0x13 /* insert cursor */ | |
56 | -#define ORDER_SF 0x1d /* start field */ | |
57 | -#define ORDER_SA 0x28 /* set attribute */ | |
58 | -#define ORDER_SFE 0x29 /* start field extended */ | |
59 | -#define ORDER_YALE 0x2b /* Yale sub command */ | |
60 | -#define ORDER_MF 0x2c /* modify field */ | |
61 | -#define ORDER_RA 0x3c /* repeat to address */ | |
62 | - | |
63 | -#define FCORDER_NULL 0x00 /* format control: null */ | |
64 | -#define FCORDER_FF 0x0c /* form feed */ | |
65 | -#define FCORDER_CR 0x0d /* carriage return */ | |
66 | -#define FCORDER_SO 0x0e /* shift out (DBCS subfield) */ | |
67 | -#define FCORDER_SI 0x0f /* shift in (DBCS end) */ | |
68 | -#define FCORDER_NL 0x15 /* new line */ | |
69 | -#define FCORDER_EM 0x19 /* end of medium */ | |
70 | -#define FCORDER_DUP 0x1c /* duplicate */ | |
71 | -#define FCORDER_FM 0x1e /* field mark */ | |
72 | -#define FCORDER_SUB 0x3f /* substitute */ | |
73 | -#define FCORDER_EO 0xff /* eight ones */ | |
74 | - | |
75 | -/* SCS control code, some overlap orders */ | |
76 | -#define SCS_BS 0x16 /* Back Space */ | |
77 | -#define SCS_BEL 0x2f /* Bell Function */ | |
78 | -#define SCS_CR 0x0d /* Carriage Return */ | |
79 | -#define SCS_ENP 0x14 /* Enable Presentation */ | |
80 | -#define SCS_FF 0x0c /* Forms Feed */ | |
81 | -#define SCS_GE 0x08 /* Graphic Escape */ | |
82 | -#define SCS_HT 0x05 /* Horizontal Tab */ | |
83 | -#define SCS_INP 0x24 /* Inhibit Presentation */ | |
84 | -#define SCS_IRS 0x1e /* Interchange-Record Separator */ | |
85 | -#define SCS_LF 0x25 /* Line Feed */ | |
86 | -#define SCS_NL 0x15 /* New Line */ | |
87 | -#define SCS_SA 0x28 /* Set Attribute: */ | |
88 | -#define SCS_SA_RESET 0x00 /* Reset all */ | |
89 | -#define SCS_SA_HIGHLIGHT 0x41 /* Highlighting */ | |
90 | -#define SCS_SA_CS 0x42 /* Character set */ | |
91 | -#define SCS_SA_GRID 0xc2 /* Grid */ | |
92 | -#define SCS_SET 0x2b /* Set: */ | |
93 | -#define SCS_SHF 0xc1 /* Horizontal format */ | |
94 | -#define SCS_SLD 0xc6 /* Line Density */ | |
95 | -#define SCS_SVF 0xc2 /* Vertical Format */ | |
96 | -#define SCS_SO 0x0e /* Shift out (DBCS subfield start) */ | |
97 | -#define SCS_SI 0x0f /* Shift in (DBCS subfield end) */ | |
98 | -#define SCS_TRN 0x35 /* Transparent */ | |
99 | -#define SCS_VCS 0x04 /* Vertical Channel Select */ | |
100 | -#define SCS_VT 0x0b /* Vertical Tab */ | |
101 | - | |
102 | -/* Structured fields */ | |
103 | -#define SF_READ_PART 0x01 /* read partition */ | |
104 | -#define SF_RP_QUERY 0x02 /* query */ | |
105 | -#define SF_RP_QLIST 0x03 /* query list */ | |
106 | -#define SF_RPQ_LIST 0x00 /* QCODE list */ | |
107 | -#define SF_RPQ_EQUIV 0x40 /* equivalent+ QCODE list */ | |
108 | -#define SF_RPQ_ALL 0x80 /* all */ | |
109 | -#define SF_ERASE_RESET 0x03 /* erase/reset */ | |
110 | -#define SF_ER_DEFAULT 0x00 /* default */ | |
111 | -#define SF_ER_ALT 0x80 /* alternate */ | |
112 | -#define SF_SET_REPLY_MODE 0x09 /* set reply mode */ | |
113 | -#define SF_SRM_FIELD 0x00 /* field */ | |
114 | -#define SF_SRM_XFIELD 0x01 /* extended field */ | |
115 | -#define SF_SRM_CHAR 0x02 /* character */ | |
116 | -#define SF_CREATE_PART 0x0c /* create partition */ | |
117 | -#define CPFLAG_PROT 0x40 /* protected flag */ | |
118 | -#define CPFLAG_COPY_PS 0x20 /* local copy to presentation space */ | |
119 | -#define CPFLAG_BASE 0x07 /* base character set index */ | |
120 | -#define SF_OUTBOUND_DS 0x40 /* outbound 3270 DS */ | |
121 | -#define SF_TRANSFER_DATA 0xd0 /* file transfer open request */ | |
122 | - | |
123 | -/* Query replies */ | |
124 | -#define QR_SUMMARY 0x80 /* summary */ | |
125 | -#define QR_USABLE_AREA 0x81 /* usable area */ | |
126 | -#define QR_ALPHA_PART 0x84 /* alphanumeric partitions */ | |
127 | -#define QR_CHARSETS 0x85 /* character sets */ | |
128 | -#define QR_COLOR 0x86 /* color */ | |
129 | -#define QR_HIGHLIGHTING 0x87 /* highlighting */ | |
130 | -#define QR_REPLY_MODES 0x88 /* reply modes */ | |
131 | -#define QR_DBCS_ASIA 0x91 /* DBCS-Asia */ | |
132 | -#define QR_PC3270 0x93 /* PC3270 */ | |
133 | -#define QR_DDM 0x95 /* distributed data management */ | |
134 | -#define QR_RPQNAMES 0xa1 /* RPQ names */ | |
135 | -#define QR_IMP_PART 0xa6 /* implicit partition */ | |
136 | -#define QR_NULL 0xff /* null */ | |
137 | - | |
138 | -#define BA_TO_ROW(ba) ((ba) / h3270.cols) | |
139 | -#define BA_TO_COL(ba) ((ba) % h3270.cols) | |
140 | -#define ROWCOL_TO_BA(r,c) (((r) * h3270.cols) + c) | |
141 | -#define INC_BA(ba) { (ba) = ((ba) + 1) % (h3270.cols * h3270.rows); } | |
142 | -#define DEC_BA(ba) { (ba) = (ba) ? (ba - 1) : ((h3270.cols*h3270.rows) - 1); } | |
143 | - | |
144 | -/* Field attributes. */ | |
145 | -#define FA_PRINTABLE 0xc0 /* these make the character "printable" */ | |
146 | -#define FA_PROTECT 0x20 /* unprotected (0) / protected (1) */ | |
147 | -#define FA_NUMERIC 0x10 /* alphanumeric (0) /numeric (1) */ | |
148 | -#define FA_INTENSITY 0x0c /* display/selector pen detectable: */ | |
149 | -#define FA_INT_NORM_NSEL 0x00 /* 00 normal, non-detect */ | |
150 | -#define FA_INT_NORM_SEL 0x04 /* 01 normal, detectable */ | |
151 | -#define FA_INT_HIGH_SEL 0x08 /* 10 intensified, detectable */ | |
152 | -#define FA_INT_ZERO_NSEL 0x0c /* 11 nondisplay, non-detect */ | |
153 | -#define FA_RESERVED 0x02 /* must be 0 */ | |
154 | -#define FA_MODIFY 0x01 /* modified (1) */ | |
155 | - | |
156 | -/* Bits in the field attribute that are stored. */ | |
157 | -#define FA_MASK (FA_PROTECT | FA_NUMERIC | FA_INTENSITY | FA_MODIFY) | |
158 | - | |
159 | -/* Tests for various attribute properties. */ | |
160 | -#define FA_IS_MODIFIED(c) ((c) & FA_MODIFY) | |
161 | -#define FA_IS_NUMERIC(c) ((c) & FA_NUMERIC) | |
162 | -#define FA_IS_PROTECTED(c) ((c) & FA_PROTECT) | |
163 | -#define FA_IS_SKIP(c) (((c) & FA_PROTECT) && ((c) & FA_NUMERIC)) | |
164 | - | |
165 | -#define FA_IS_ZERO(c) \ | |
166 | - (((c) & FA_INTENSITY) == FA_INT_ZERO_NSEL) | |
167 | -#define FA_IS_HIGH(c) \ | |
168 | - (((c) & FA_INTENSITY) == FA_INT_HIGH_SEL) | |
169 | -#define FA_IS_NORMAL(c) \ | |
170 | - ( \ | |
171 | - ((c) & FA_INTENSITY) == FA_INT_NORM_NSEL \ | |
172 | - || \ | |
173 | - ((c) & FA_INTENSITY) == FA_INT_NORM_SEL \ | |
174 | - ) | |
175 | -#define FA_IS_SELECTABLE(c) \ | |
176 | - ( \ | |
177 | - ((c) & FA_INTENSITY) == FA_INT_NORM_SEL \ | |
178 | - || \ | |
179 | - ((c) & FA_INTENSITY) == FA_INT_HIGH_SEL \ | |
180 | - ) | |
181 | -#define FA_IS_INTENSE(c) \ | |
182 | - ((c & FA_INT_HIGH_SEL) == FA_INT_HIGH_SEL) | |
183 | - | |
184 | -/* Extended attributes */ | |
185 | -#define XA_ALL 0x00 | |
186 | -#define XA_3270 0xc0 | |
187 | -#define XA_VALIDATION 0xc1 | |
188 | -#define XAV_FILL 0x04 | |
189 | -#define XAV_ENTRY 0x02 | |
190 | -#define XAV_TRIGGER 0x01 | |
191 | -#define XA_OUTLINING 0xc2 | |
192 | -#define XAO_UNDERLINE 0x01 | |
193 | -#define XAO_RIGHT 0x02 | |
194 | -#define XAO_OVERLINE 0x04 | |
195 | -#define XAO_LEFT 0x08 | |
196 | -#define XA_HIGHLIGHTING 0x41 | |
197 | -#define XAH_DEFAULT 0x00 | |
198 | -#define XAH_NORMAL 0xf0 | |
199 | -#define XAH_BLINK 0xf1 | |
200 | -#define XAH_REVERSE 0xf2 | |
201 | -#define XAH_UNDERSCORE 0xf4 | |
202 | -#define XAH_INTENSIFY 0xf8 | |
203 | -#define XA_FOREGROUND 0x42 | |
204 | -#define XAC_DEFAULT 0x00 | |
205 | -#define XA_CHARSET 0x43 | |
206 | -#define XA_BACKGROUND 0x45 | |
207 | -#define XA_TRANSPARENCY 0x46 | |
208 | -#define XAT_DEFAULT 0x00 | |
209 | -#define XAT_OR 0xf0 | |
210 | -#define XAT_XOR 0xf1 | |
211 | -#define XAT_OPAQUE 0xff | |
212 | -#define XA_INPUT_CONTROL 0xfe | |
213 | -#define XAI_DISABLED 0x00 | |
214 | -#define XAI_ENABLED 0x01 | |
215 | - | |
216 | -/* WCC definitions */ | |
217 | -#define WCC_RESET(c) ((c) & 0x40) | |
218 | -#define WCC_START_PRINTER(c) ((c) & 0x08) | |
219 | -#define WCC_SOUND_ALARM(c) ((c) & 0x04) | |
220 | -#define WCC_KEYBOARD_RESTORE(c) ((c) & 0x02) | |
221 | -#define WCC_RESET_MDT(c) ((c) & 0x01) | |
222 | - | |
223 | -/* AIDs */ | |
224 | -#define AID_NO 0x60 /* no AID generated */ | |
225 | -#define AID_QREPLY 0x61 | |
226 | -#define AID_ENTER 0x7d | |
227 | -#define AID_PF1 0xf1 | |
228 | -#define AID_PF2 0xf2 | |
229 | -#define AID_PF3 0xf3 | |
230 | -#define AID_PF4 0xf4 | |
231 | -#define AID_PF5 0xf5 | |
232 | -#define AID_PF6 0xf6 | |
233 | -#define AID_PF7 0xf7 | |
234 | -#define AID_PF8 0xf8 | |
235 | -#define AID_PF9 0xf9 | |
236 | -#define AID_PF10 0x7a | |
237 | -#define AID_PF11 0x7b | |
238 | -#define AID_PF12 0x7c | |
239 | -#define AID_PF13 0xc1 | |
240 | -#define AID_PF14 0xc2 | |
241 | -#define AID_PF15 0xc3 | |
242 | -#define AID_PF16 0xc4 | |
243 | -#define AID_PF17 0xc5 | |
244 | -#define AID_PF18 0xc6 | |
245 | -#define AID_PF19 0xc7 | |
246 | -#define AID_PF20 0xc8 | |
247 | -#define AID_PF21 0xc9 | |
248 | -#define AID_PF22 0x4a | |
249 | -#define AID_PF23 0x4b | |
250 | -#define AID_PF24 0x4c | |
251 | -#define AID_OICR 0xe6 | |
252 | -#define AID_MSR_MHS 0xe7 | |
253 | -#define AID_SELECT 0x7e | |
254 | -#define AID_PA1 0x6c | |
255 | -#define AID_PA2 0x6e | |
256 | -#define AID_PA3 0x6b | |
257 | -#define AID_CLEAR 0x6d | |
258 | -#define AID_SYSREQ 0xf0 | |
259 | - | |
260 | -#define AID_SF 0x88 | |
261 | -#define SFID_QREPLY 0x81 | |
262 | - | |
263 | -/* Colors */ | |
264 | -#define COLOR_NEUTRAL_BLACK 0 | |
265 | -#define COLOR_BLUE 1 | |
266 | -#define COLOR_RED 2 | |
267 | -#define COLOR_PINK 3 | |
268 | -#define COLOR_GREEN 4 | |
269 | -#define COLOR_TURQUOISE 5 | |
270 | -#define COLOR_YELLOW 6 | |
271 | -#define COLOR_NEUTRAL_WHITE 7 | |
272 | -#define COLOR_BLACK 8 | |
273 | -#define COLOR_DEEP_BLUE 9 | |
274 | -#define COLOR_ORANGE 10 | |
275 | -#define COLOR_PURPLE 11 | |
276 | -#define COLOR_PALE_GREEN 12 | |
277 | -#define COLOR_PALE_TURQUOISE 13 | |
278 | -#define COLOR_GREY 14 | |
279 | -#define COLOR_WHITE 15 | |
280 | - | |
281 | -/* Data stream manipulation macros. */ | |
282 | -#define MASK32 0xff000000U | |
283 | -#define MASK24 0x00ff0000U | |
284 | -#define MASK16 0x0000ff00U | |
285 | -#define MASK08 0x000000ffU | |
286 | -#define MINUS1 0xffffffffU | |
287 | - | |
288 | -#define SET16(ptr, val) { \ | |
289 | - *((ptr)++) = ((val) & MASK16) >> 8; \ | |
290 | - *((ptr)++) = ((val) & MASK08); \ | |
291 | -} | |
292 | -#define GET16(val, ptr) { \ | |
293 | - (val) = *((ptr)+1); \ | |
294 | - (val) += *(ptr) << 8; \ | |
295 | -} | |
296 | -#define SET32(ptr, val) { \ | |
297 | - *((ptr)++) = ((val) & MASK32) >> 24; \ | |
298 | - *((ptr)++) = ((val) & MASK24) >> 16; \ | |
299 | - *((ptr)++) = ((val) & MASK16) >> 8; \ | |
300 | - *((ptr)++) = ((val) & MASK08); \ | |
301 | -} | |
302 | -#define HIGH8(s) (((s) >> 8) & 0xff) | |
303 | -#define LOW8(s) ((s) & 0xff) | |
304 | - | |
305 | -/* Other EBCDIC control codes. */ | |
306 | -#define EBC_null 0x00 | |
307 | -#define EBC_ff 0x0c | |
308 | -#define EBC_cr 0x0d | |
309 | -#define EBC_so 0x0e | |
310 | -#define EBC_si 0x0f | |
311 | -#define EBC_nl 0x15 | |
312 | -#define EBC_em 0x19 | |
313 | -#define EBC_dup 0x1c | |
314 | -#define EBC_fm 0x1e | |
315 | -#define EBC_space 0x40 | |
316 | -#define EBC_nobreakspace 0x41 | |
317 | -#define EBC_period 0x4b | |
318 | -#define EBC_ampersand 0x50 | |
319 | -#define EBC_underscore 0x6d | |
320 | -#define EBC_greater 0x6e | |
321 | -#define EBC_question 0x6f | |
322 | -#define EBC_Yacute 0xad | |
323 | -#define EBC_diaeresis 0xbd | |
324 | -#define EBC_minus 0xca | |
325 | -#define EBC_0 0xf0 | |
326 | -#define EBC_9 0xf9 | |
327 | -#define EBC_eo 0xff | |
328 | - | |
329 | -/* BIND definitions. */ | |
330 | -#define BIND_RU LIB3270_BIND_RU | |
331 | -#define BIND_OFF_PLU_NAME_LEN LIB3270_BIND_OFF_PLU_NAME_LEN | |
332 | -#define BIND_OFF_PLU_NAME LIB3270_BIND_OFF_PLU_NAME | |
333 | -#define BIND_PLU_NAME_MAX LIB3270_BIND_PLU_NAME_MAX |
src/lib3270/ansi.c
src/lib3270/ctlr.c
src/lib3270/ft_cut.c
src/lib3270/ft_dft.c
src/lib3270/glue.c
src/lib3270/html.c
... | ... | @@ -27,8 +27,10 @@ |
27 | 27 | */ |
28 | 28 | |
29 | 29 | #include <string.h> |
30 | + #include <stdlib.h> | |
30 | 31 | #include <lib3270.h> |
31 | 32 | #include <lib3270/session.h> |
33 | + #include <lib3270/3270ds.h> | |
32 | 34 | #include <lib3270/html.h> |
33 | 35 | |
34 | 36 | #include "globals.h" |
... | ... | @@ -68,29 +70,44 @@ |
68 | 70 | |
69 | 71 | static const char * html_color[] = |
70 | 72 | { |
71 | - "black", | |
72 | - "deepSkyBlue", | |
73 | - "red", | |
74 | - "pink", | |
75 | - "green", | |
76 | - "turquoise", | |
77 | - "yellow", | |
78 | - "white", | |
79 | - "black", | |
80 | - "blue", | |
81 | - "orange", | |
82 | - "purple", | |
83 | - "paleGreen", | |
84 | - "paleTurquoise", | |
85 | - "grey", | |
86 | - "white" | |
73 | + // Terminal colors | |
74 | + "black", | |
75 | + "deepSkyBlue", | |
76 | + "red", | |
77 | + "pink", | |
78 | + "green", | |
79 | + "turquoise", | |
80 | + "yellow", | |
81 | + "white", | |
82 | + "black", | |
83 | + "blue", | |
84 | + "orange", | |
85 | + "purple", | |
86 | + "paleGreen", | |
87 | + "paleTurquoise", | |
88 | + "grey", | |
89 | + "white", | |
90 | + | |
91 | + // Field colors | |
92 | + "green", // Normal/Unprotected | |
93 | + "red", // Intensified/Unprotected | |
94 | + "cyan", // Normal/Protected | |
95 | + "white", // Intensified/Protected | |
96 | + | |
87 | 97 | }; |
88 | 98 | |
89 | 99 | struct html_info |
90 | 100 | { |
91 | 101 | int szText; |
92 | 102 | |
93 | - unsigned char fa; /**< field attribute, it nonzero */ | |
103 | + enum mode | |
104 | + { | |
105 | + HTML_MODE_TEXT, /**< Non editable */ | |
106 | + HTML_MODE_INPUT_TEXT, /**< Text input */ | |
107 | + HTML_MODE_INPUT_VALUE, /**< Value input */ | |
108 | + HTML_MODE_INPUT_BUTTON, /**< Button input (PFkey) */ | |
109 | + } mode; | |
110 | + | |
94 | 111 | char * text; |
95 | 112 | int maxlength; |
96 | 113 | unsigned short fg; |
... | ... | @@ -124,9 +141,8 @@ |
124 | 141 | unsigned short bg = ((attr & 0x00F0) >> 4); |
125 | 142 | char * txt; |
126 | 143 | |
127 | - #warning Fix field colors | |
128 | 144 | if(attr & LIB3270_ATTR_FIELD) |
129 | - fg = (attr & 0x0003); | |
145 | + fg = 16+(attr & 0x0003); | |
130 | 146 | else |
131 | 147 | fg = (attr & 0x000F); |
132 | 148 | |
... | ... | @@ -162,6 +178,34 @@ |
162 | 178 | |
163 | 179 | } |
164 | 180 | |
181 | + static void open_input(struct html_info *info, int addr) | |
182 | + { | |
183 | + char name[30]; | |
184 | + | |
185 | + snprintf(name,29,"F%04d",addr); | |
186 | + | |
187 | + append_string(info,"<input type=\"text\" name=\""); | |
188 | + append_string(info,name); | |
189 | + append_string(info,"\""); | |
190 | + info->mode = HTML_MODE_INPUT_TEXT; | |
191 | + } | |
192 | + | |
193 | + static void close_input(struct html_info *info) | |
194 | + { | |
195 | + char buffer[80]; | |
196 | + | |
197 | + if(info->mode == HTML_MODE_TEXT) | |
198 | + return; | |
199 | + | |
200 | + snprintf(buffer,80," maxlength=\"%d\" class=\"IW%03d\"",info->maxlength,info->maxlength); | |
201 | + append_string(info,buffer); | |
202 | + | |
203 | + append_string(info,"></input>"); | |
204 | + | |
205 | + info->mode = HTML_MODE_TEXT; | |
206 | + info->maxlength = 0; | |
207 | + } | |
208 | + | |
165 | 209 | LIB3270_EXPORT char * lib3270_get_as_html(H3270 *session, LIB3270_HTML_OPTION option) |
166 | 210 | { |
167 | 211 | int row, baddr; |
... | ... | @@ -172,6 +216,7 @@ |
172 | 216 | info.text = lib3270_malloc(info.szText+1); |
173 | 217 | info.fg = 0xFF; |
174 | 218 | info.bg = 0xFF; |
219 | + info.mode = HTML_MODE_TEXT; | |
175 | 220 | |
176 | 221 | if(option & LIB3270_HTML_OPTION_HEADERS) |
177 | 222 | { |
... | ... | @@ -193,69 +238,127 @@ |
193 | 238 | len = col; |
194 | 239 | } |
195 | 240 | |
196 | - for(col = 0; col <= len;col++) | |
241 | + for(col = 0; col <= len || (col < session->cols && info.mode != HTML_MODE_TEXT);col++) | |
197 | 242 | { |
198 | - if((option && LIB3270_HTML_OPTION_ALL) || (session->text[baddr+col].attr & LIB3270_ATTR_SELECTED)) | |
243 | + if((option & LIB3270_HTML_OPTION_ALL) || (session->text[baddr+col].attr & LIB3270_ATTR_SELECTED)) | |
199 | 244 | { |
200 | 245 | cr++; |
201 | 246 | |
202 | - if(session->text[baddr+col].attr & LIB3270_ATTR_CG) | |
247 | + if((session->text[baddr+col].attr & LIB3270_ATTR_MARKER) && (option & LIB3270_HTML_OPTION_FORM) ) | |
203 | 248 | { |
204 | - static const struct chr_xlat xlat[] = | |
205 | - { | |
206 | - { 0xd3, "+" }, // CG 0xab, plus | |
207 | - { 0xa2, "-" }, // CG 0x92, horizontal line | |
208 | - { 0x85, "|" }, // CG 0x184, vertical line | |
209 | - { 0xd4, "+" }, // CG 0xac, LR corner | |
210 | - { 0xd5, "+" }, // CG 0xad, UR corner | |
211 | - { 0xc5, "+" }, // CG 0xa4, UL corner | |
212 | - { 0xc4, "+" }, // CG 0xa3, LL corner | |
213 | - { 0xc6, "|" }, // CG 0xa5, left tee | |
214 | - { 0xd6, "|" }, // CG 0xae, right tee | |
215 | - { 0xc7, "-" }, // CG 0xa6, bottom tee | |
216 | - { 0xd7, "-" }, // CG 0xaf, top tee | |
217 | - { 0x8c, "≤" }, // CG 0xf7, less or equal "≤" | |
218 | - { 0xae, "≥" }, // CG 0xd9, greater or equal "≥" | |
219 | - { 0xbe, "≠" }, // CG 0x3e, not equal "≠" | |
220 | - { 0xad, "[" }, // "[" | |
221 | - { 0xbd, "]" }, // "]" | |
222 | - | |
223 | - { 0x00, NULL } | |
224 | - }; | |
249 | + int fa = (session->ea_buf[baddr+col].fa & FA_MASK); | |
250 | + int tx = (info.mode == HTML_MODE_TEXT); | |
251 | + | |
252 | + close_input(&info); | |
225 | 253 | |
226 | 254 | update_colors(&info,session->text[baddr+col].attr); |
227 | - append_char(&info, xlat, session->text[baddr+col].chr); | |
228 | 255 | |
256 | + if(!FA_IS_PROTECTED(fa)) | |
257 | + { | |
258 | + // Input field | |
259 | + open_input(&info,baddr+col+1); | |
260 | + } | |
261 | + else if(col < len && session->text[baddr+col+1].chr == 'F') | |
262 | + { | |
263 | + char *text = lib3270_get_field_at(session,baddr+col+1); | |
264 | + | |
265 | + if(text) | |
266 | + { | |
267 | + char *ptr = text; | |
268 | + | |
269 | + while(*ptr && *ptr == ' ') | |
270 | + ptr++; | |
271 | + | |
272 | + if(strlen(ptr)>1) | |
273 | + { | |
274 | + int value = atoi(ptr+1); | |
275 | + if(value > 1 && value < 24) | |
276 | + { | |
277 | + // E uma PF, cria um botao | |
278 | + char name[30]; | |
279 | + | |
280 | + snprintf(name,29,"PF%02d",value); | |
281 | + | |
282 | + append_string(&info,"<input type=\"button\" name=\""); | |
283 | + append_string(&info,name); | |
284 | + append_string(&info,"\" value=\""); | |
285 | + append_string(&info,ptr); | |
286 | + append_string(&info,"\""); | |
287 | + info.mode = HTML_MODE_INPUT_BUTTON; | |
288 | + } | |
289 | + } | |
290 | + lib3270_free(text); | |
291 | + } | |
292 | + | |
293 | + } | |
294 | + else if(tx) | |
295 | + { | |
296 | + append_string(&info," "); | |
297 | + } | |
229 | 298 | } |
230 | - else | |
299 | + else if(info.mode == HTML_MODE_TEXT) | |
231 | 300 | { |
232 | - static const struct chr_xlat xlat[] = | |
301 | + // Normal text | |
302 | + update_colors(&info,session->text[baddr+col].attr); | |
303 | + | |
304 | + if(session->text[baddr+col].attr & LIB3270_ATTR_CG) | |
233 | 305 | { |
234 | - { '"', """ }, | |
235 | - { '&', "&" }, | |
236 | - { '<', "<" }, | |
237 | - { '>', ">" }, | |
238 | - { ' ', " " }, | |
306 | + static const struct chr_xlat xlat[] = | |
307 | + { | |
308 | + { 0xd3, "+" }, // CG 0xab, plus | |
309 | + { 0xa2, "-" }, // CG 0x92, horizontal line | |
310 | + { 0x85, "|" }, // CG 0x184, vertical line | |
311 | + { 0xd4, "+" }, // CG 0xac, LR corner | |
312 | + { 0xd5, "+" }, // CG 0xad, UR corner | |
313 | + { 0xc5, "+" }, // CG 0xa4, UL corner | |
314 | + { 0xc4, "+" }, // CG 0xa3, LL corner | |
315 | + { 0xc6, "|" }, // CG 0xa5, left tee | |
316 | + { 0xd6, "|" }, // CG 0xae, right tee | |
317 | + { 0xc7, "-" }, // CG 0xa6, bottom tee | |
318 | + { 0xd7, "-" }, // CG 0xaf, top tee | |
319 | + { 0x8c, "≤" }, // CG 0xf7, less or equal "≤" | |
320 | + { 0xae, "≥" }, // CG 0xd9, greater or equal "≥" | |
321 | + { 0xbe, "≠" }, // CG 0x3e, not equal "≠" | |
322 | + { 0xad, "[" }, // "[" | |
323 | + { 0xbd, "]" }, // "]" | |
324 | + | |
325 | + { 0x00, NULL } | |
326 | + }; | |
239 | 327 | |
240 | - { 0x00, NULL } | |
241 | - }; | |
328 | + append_char(&info, xlat, session->text[baddr+col].chr); | |
242 | 329 | |
243 | - if((session->text[baddr+col].attr & LIB3270_ATTR_MARKER)) | |
244 | - { | |
245 | - update_colors(&info,session->text[baddr+col].attr); | |
246 | - append_string(&info,"|"); | |
247 | 330 | } |
248 | 331 | else |
249 | 332 | { |
250 | - update_colors(&info,session->text[baddr+col].attr); | |
333 | + static const struct chr_xlat xlat[] = | |
334 | + { | |
335 | + { '"', """ }, | |
336 | + { '&', "&" }, | |
337 | + { '<', "<" }, | |
338 | + { '>', ">" }, | |
339 | + { ' ', " " }, | |
340 | + | |
341 | + { 0x00, NULL } | |
342 | + }; | |
251 | 343 | append_char(&info, xlat, session->text[baddr+col].chr); |
252 | 344 | } |
253 | 345 | } |
346 | + else | |
347 | + { | |
348 | + // Input contents | |
349 | + info.maxlength++; | |
350 | + } | |
254 | 351 | } |
255 | 352 | } |
256 | 353 | |
257 | 354 | baddr += session->cols; |
258 | 355 | |
356 | + if(info.mode != HTML_MODE_TEXT) | |
357 | + { | |
358 | + #warning Incluir o tratamento correto | |
359 | + close_input(&info); | |
360 | + } | |
361 | + | |
259 | 362 | if(cr || (option && LIB3270_HTML_OPTION_ALL)) |
260 | 363 | append_element(&info,HTML_ELEMENT_LINE_BREAK); |
261 | 364 | } | ... | ... |
src/lib3270/kybd.c
src/lib3270/paste.c
src/lib3270/proxy.c
src/lib3270/rpq.c
src/lib3270/screen.c
src/lib3270/see.c
src/lib3270/selection.c
... | ... | @@ -497,6 +497,24 @@ LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len) |
497 | 497 | return buffer; |
498 | 498 | } |
499 | 499 | |
500 | +/** | |
501 | + * Get field contents | |
502 | + * | |
503 | + * @param session Session handle | |
504 | + * @param baddr Field addr | |
505 | + * | |
506 | + * @return String with the field contents (release it with lib3270_free() | |
507 | + */ | |
508 | +LIB3270_EXPORT char * lib3270_get_field_at(H3270 *session, int baddr) | |
509 | +{ | |
510 | + int first = lib3270_field_addr(session,baddr); | |
511 | + | |
512 | + if(first < 0) | |
513 | + return NULL; | |
514 | + | |
515 | + return lib3270_get_text(session,first,lib3270_field_length(session,first)+1); | |
516 | +} | |
517 | + | |
500 | 518 | LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) |
501 | 519 | { |
502 | 520 | if(!hSession->selected || hSession->select.start == hSession->select.end) | ... | ... |
src/lib3270/session.c
... | ... | @@ -44,7 +44,7 @@ |
44 | 44 | #include "ctlrc.h" |
45 | 45 | #include "ftc.h" |
46 | 46 | #include "kybdc.h" |
47 | -#include "3270ds.h" | |
47 | +#include <lib3270/3270ds.h> | |
48 | 48 | |
49 | 49 | /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/ |
50 | 50 | ... | ... |
src/lib3270/sf.c
src/lib3270/telnet.c
src/lib3270/toggles.c
... | ... | @@ -77,6 +77,8 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] = |
77 | 77 | "autoconnect", |
78 | 78 | "kpalternative", /**< Keypad +/- move to next/previous field */ |
79 | 79 | "beep", /**< Beep on errors */ |
80 | + "fieldattr", /**< View Field attribute */ | |
81 | + | |
80 | 82 | }; |
81 | 83 | |
82 | 84 | LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE ix) | ... | ... |
src/lib3270/trace_ds.c
src/pw3270/v3270/draw.c
... | ... | @@ -28,6 +28,7 @@ |
28 | 28 | */ |
29 | 29 | |
30 | 30 | #include <gtk/gtk.h> |
31 | + #include <math.h> | |
31 | 32 | #include <pw3270.h> |
32 | 33 | #include <lib3270.h> |
33 | 34 | #include <lib3270/session.h> |
... | ... | @@ -131,7 +132,24 @@ void v3270_draw_char(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 |
131 | 132 | gdk_cairo_set_source_color(cr,fg); |
132 | 133 | |
133 | 134 | // Draw char |
134 | - if(attr & LIB3270_ATTR_CG) | |
135 | + if( (attr & LIB3270_ATTR_MARKER) && lib3270_get_toggle(session,LIB3270_TOGGLE_VIEW_FIELD) ) | |
136 | + { | |
137 | + double sz = (double) rect->width; | |
138 | + if(rect->height < rect->width) | |
139 | + sz = (double) rect->height; | |
140 | + | |
141 | + cairo_save(cr); | |
142 | + | |
143 | + sz /= 10; | |
144 | + | |
145 | + cairo_translate(cr, rect->x + (rect->width / 2), rect->y + (rect->height / 2)); | |
146 | + cairo_scale(cr, sz, sz); | |
147 | + cairo_arc(cr, 0., 0., 1., 0., 2 * M_PI); | |
148 | + | |
149 | + | |
150 | + cairo_restore(cr); | |
151 | + } | |
152 | + else if(attr & LIB3270_ATTR_CG) | |
135 | 153 | { |
136 | 154 | switch(chr) |
137 | 155 | { | ... | ... |
ui/99debug.xml
... | ... | @@ -16,8 +16,8 @@ |
16 | 16 | obter mais detalhes. |
17 | 17 | |
18 | 18 | Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este |
19 | - programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
20 | - St, Fifth Floor, Boston, MA 02110-1301 USA | |
19 | + programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
20 | + St, Fifth Floor, Boston, MA 02110-1301 USA | |
21 | 21 | |
22 | 22 | Contatos: |
23 | 23 | |
... | ... | @@ -40,6 +40,7 @@ |
40 | 40 | <menuitem action='toggle' id='dstrace' label='DS Trace' /> |
41 | 41 | <menuitem action='toggle' id='screentrace' label='Screen Trace' /> |
42 | 42 | <menuitem action='toggle' id='eventtrace' label='Event Trace' /> |
43 | + <menuitem action='toggle' id='fieldattr' label='View Field Delimiters' /> | |
43 | 44 | </menu> |
44 | 45 | </menu> |
45 | 46 | ... | ... |